1. 程式人生 > >一起來讀Greenplum/Deepgreen執行計劃

一起來讀Greenplum/Deepgreen執行計劃

 日常SQL優化過程中,最好用的手段就是通過執行計劃。在Greenplum和Deepgreen中,執行 EXPLAIN 後產生的執行計劃呈樹狀,這棵樹的每一個分叉,都代表了一個單獨的資料庫操作,例如:表掃描、表連線、聚合、排序。

日常SQL優化過程中,最好用的手段就是通過執行計劃。在Greenplum和Deepgreen中,執行 EXPLAIN 後產生的執行計劃呈樹狀,這棵樹的每一個分叉,都代表了一個單獨的資料庫操作,例如:表掃描、表連線、聚合、排序。

由於返回資料行數是從下向上傳遞的,所以我們在分析執行計劃時,也應該自下而上。通常來說,最底下的是表掃描操作(索引、點陣圖索引掃描)。如果查詢中涉及到連線、聚合、排序操作,那麼表掃描動作的上層就會有對應的這些操作。通常最頂上的部分是節點間資料移動(重分佈、廣播、聚集操作),在查詢過程中,這些操作會涉及到在節點間移動資料。

EXPLAIN 執行計劃中,每一個單獨的步驟都會呈現在單獨一行裡,帶有對應的動作型別及查詢資料所耗費的時間(查詢首行所用時間..查詢全部所用時間):

1.cost

Cost以磁碟頁讀取為測量單位,1.0等同於一個順序的磁碟頁讀取。第一個預估時間是起始消耗,即查詢首行所消耗的時間,第二個預估值是總消耗,即查詢全部行所用的時間。

2.rows

rows指的是執行計劃某部分返回的總行數。這個數量通常少於實際的返回行數,反應的只是一個預估的數量。最頂層的返回的預估數量最接近實際查詢、修改或刪除影響的行數。

3.width

操作返回的所有資料所佔用的位元組數。

很重要的一點是,上層節點所花費的時間包括所以子節點佔用時間,計劃最頂層包含總執行花費的預估,這也是我們追求優化的部分。另外執行計劃的消耗只與執行計劃本身關心的步驟有關,與查詢結果傳輸到客戶端的消耗時間等因素無關。