時間一晃周末就過完了,時間過得太快,不由得讓人倍加珍惜。時間真是不夠用哈~
好的不廢話,這次我們開始看查詢規(guī)劃模塊的源碼吧。
查詢規(guī)劃部分的在整個查詢處理模塊應(yīng)該是在一個非常重要的地位上,這一步直接決定了查詢的方式與路徑,很大程度上影響了數(shù)據(jù)庫查詢的查詢性能。因此這一塊代碼量也很大,我也會花較多的筆墨來分析這個模塊的代碼。在篇幅上,可能查詢規(guī)劃這一模塊我會用2到3篇文章來細(xì)細(xì)的說明下。今天這一篇先總體概述下查詢規(guī)劃模塊的全貌,在介紹該模塊的一個重要的子模塊(總共三個主要模塊)就結(jié)束吧,剩下的交給第二篇吧。
1.查詢規(guī)劃模塊總體概況
廢話不多說,我先上圖。下圖大概的刻畫了查詢規(guī)劃模塊里主要的函數(shù)調(diào)用關(guān)系,當(dāng)然啦,最下層只畫到主處理函數(shù),主處理函數(shù)內(nèi)部的調(diào)用關(guān)系在介紹每個主處理函數(shù)的時候再細(xì)細(xì)的說吧。
我簡單介紹下吧。exec_simple_query函數(shù)是負(fù)責(zé)查詢處理的主函數(shù),在進(jìn)行查詢規(guī)劃之前,它已經(jīng)調(diào)用了查詢分析和查詢重寫模塊。還記得上一篇博文的查詢重寫模塊么?該模塊返回的是重寫后的查詢樹鏈表。這里exec_simple_query函數(shù)將重寫后的查詢樹鏈表交給查詢規(guī)劃模塊進(jìn)一步處理。查詢規(guī)劃模塊的入口函數(shù)是pg_plan_queries函數(shù)。
pg_plan_queries函數(shù)調(diào)用pg_plan_query函數(shù)對每一個查詢進(jìn)行處理并返回PlannedStmt(執(zhí)行計劃)結(jié)構(gòu)體鏈表。這里要注意,查詢規(guī)劃模塊只會對非UTILITY命令進(jìn)行處理。
而在pg_plan_query函數(shù)里,實際是調(diào)用planner函數(shù)負(fù)責(zé)查詢計劃的生成。
planner函數(shù)調(diào)用standard_planner函數(shù)進(jìn)入標(biāo)準(zhǔn)的查詢規(guī)劃處理流程。該函數(shù)接受查詢樹以及相關(guān)參數(shù),返回PlannedStmt結(jié)構(gòu)體,詳細(xì)的結(jié)構(gòu)如下:
typedef struct PlannedStmt
{
NodeTag type;
CmdType commandType; /* select|insert|update|delete */ uint32 queryId;
延伸閱讀
- ssh框架
2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖
2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe
2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】
2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞
2017-07-26
- 從棧不平衡問題 理解 calling convention
2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明
2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解
2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析
2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二)
2017-07-26
學(xué)習(xí)是年輕人改變自己的最好方式