Postgre查詢優化 --功能的角度優化分析
阿新 • • 發佈:2019-01-07
前言
前一篇文章已經從PG的資料結構等角度分析了PG的優化處理的原始碼細節,這節將從功能應用層面來對PG的查詢優化進行分析。重點還是放到了邏輯查詢優化功能上,分別針對,操作下推,謂詞改造,語義轉換,非SPJ優化等等內容。
PG查詢優化器之邏輯查詢優化
這裡的邏輯優化是針對資料庫常用的優化方案進行講解,比如檢視優化,操作下推等,下面就分模組的來詳細的敘說。
檢視重寫
根據系統的查詢規則,把查詢修改為需要的規則傳遞給查詢優化執行器。這個修改規則的過程就是檢視重寫的過程。從查詢計劃來分析,在檢視的巢狀迴圈連線在單一檢視不存在的情況下,檢視被重寫。
外連線操作,檢視重寫的過程
複雜檢視連線的優化
子查詢優化
通過子查詢上拉達到簡單的子查詢優化的結果。下面先從PG的子連線優化對照表來分析
從子連線的查詢計劃來分析結果
子查詢巢狀型別的優化
ANY型別的子連線優化
等價謂詞重寫
巢狀連線消除
消除主鍵表的連線
語義優化
選擇操作下推
選擇操作就是WHERE,JOIN,等的連線操作。
非SPJ優化
就是針對GROUPBY優化
同時出現ORDERBY的操作
DITINCT優化
代價估算
總代價 = 啟動代價 + IO代價 + CPU代價,考慮指令碼的優化從查詢計劃的節點樹,再熬代價來分析,針對各種情況進行優化,