1. 程式人生 > >Postgre查詢優化 --功能的角度優化分析

Postgre查詢優化 --功能的角度優化分析

前言

前一篇文章已經從PG的資料結構等角度分析了PG的優化處理的原始碼細節,這節將從功能應用層面來對PG的查詢優化進行分析。重點還是放到了邏輯查詢優化功能上,分別針對,操作下推,謂詞改造,語義轉換,非SPJ優化等等內容。

PG查詢優化器之邏輯查詢優化

這裡的邏輯優化是針對資料庫常用的優化方案進行講解,比如檢視優化,操作下推等,下面就分模組的來詳細的敘說。
檢視重寫
根據系統的查詢規則,把查詢修改為需要的規則傳遞給查詢優化執行器。這個修改規則的過程就是檢視重寫的過程。從查詢計劃來分析,在檢視的巢狀迴圈連線在單一檢視不存在的情況下,檢視被重寫。
在這裡插入圖片描述
外連線操作,檢視重寫的過程
在這裡插入圖片描述


複雜檢視連線的優化
在這裡插入圖片描述
子查詢優化
通過子查詢上拉達到簡單的子查詢優化的結果。下面先從PG的子連線優化對照表來分析
在這裡插入圖片描述
從子連線的查詢計劃來分析結果
在這裡插入圖片描述

子查詢巢狀型別的優化
在這裡插入圖片描述

ANY型別的子連線優化
在這裡插入圖片描述

等價謂詞重寫
在這裡插入圖片描述
巢狀連線消除
在這裡插入圖片描述
消除主鍵表的連線
在這裡插入圖片描述

語義優化
在這裡插入圖片描述
選擇操作下推
選擇操作就是WHERE,JOIN,等的連線操作。
在這裡插入圖片描述

非SPJ優化
就是針對GROUPBY優化
在這裡插入圖片描述
同時出現ORDERBY的操作
在這裡插入圖片描述
在這裡插入圖片描述

DITINCT優化
在這裡插入圖片描述
代價估算
總代價 = 啟動代價 + IO代價 + CPU代價,考慮指令碼的優化從查詢計劃的節點樹,再熬代價來分析,針對各種情況進行優化,