上一篇我們介紹了查詢規(guī)劃模塊的總體流程和預(yù)處理部分的源碼。查詢規(guī)劃模塊再執(zhí)行完預(yù)處理之后,可以進(jìn)入正式的查詢規(guī)劃處理流程了。

查詢規(guī)劃的主要工作由grouping_planner函數(shù)完成。在具體實現(xiàn)的時候,針對postgresql中獨(dú)有的繼承表,程序使用inheritance_planner函數(shù)來解決,該函數(shù)主要是先將繼承表的繼承關(guān)系變換為非繼承表來處理,然后仍然調(diào)用的是grouping_planner函數(shù)來完成查詢規(guī)劃的工作。

因此,我們說查詢規(guī)劃的主要工作在于grouping_planner函數(shù)。本篇的重點也是來解析該函數(shù)內(nèi)部的調(diào)用關(guān)系和處理流程。



3.查詢規(guī)劃處理

這里大家真的要做好準(zhǔn)備,因為grouping_planner函數(shù)本身就有將近1000行~

那什么,我們還是先上圖吧。有圖更清楚,文字太多大家也會暈的。以下是grouping_planner函數(shù)的流程圖。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

grouping_planner函數(shù)是生成查詢計劃樹的主要函數(shù)。該函數(shù)首先要考慮查詢計劃中是否有集合操作(可通過查詢樹的setOperation變量來判斷)。如果有則需要進(jìn)行集合操作:遍歷setOperation,為其中的每一個子查詢生成計劃。而對于非集合操作,計劃的生成過程如下:

網(wǎng)友評論