Postgre查詢優化器 --中篇 資料結構
阿新 • • 發佈:2019-01-02
上篇簡單的介紹了PG的查詢架構,以及優化的過程,本篇將從資料結構角度分析,查詢優化器的工作過程。本節的重點在於所提到的資料結構之間的關係,在整個PG架構裡的作用。
主要的資料結構
作為查詢優化器的4個重要的資料結構,前一篇提到的左深樹等樹的結構,那基本的資料結構肯定有list,node等。查詢樹,關係物件,連線關係物件,查詢執行計劃
而基本的資料結構是list。定義如下:
以及定義了listCell的資料結構
另外一種常用的資料結構是Node,提供頭部結構的存放物件
還有標誌SQL語句的命令型別CmdType
介紹完基本的資料結構,查詢樹的資料結構就可以使用上面提及的來表示
表物件,索引物件資料結構
PG在不同的查詢優化階段的物件資料結構,比如範圍表,這個是一個查詢物件,
表示一種在查詢過程中的虛擬關係的資料結構
針對索引設計的索引資料結構
提到的這些資料結構,從作用方面對比如下
連線操作相關的資料結構
跟連線相關的資料結構,這個肯定是跟JOIN,WHERE,HAVING等條件約束有關,這裡就產生一個約束條件物件
根據多表之間的關聯,連線的資訊相關的資料結構,特定連線資訊資料結構
上面提到了,連線的資訊,連線的物件,這裡還有補充是連線的路徑
而針對這些路徑提供排序的物件,這裡體現在遺傳演算法的“優勝劣汰”,這裡的排序路徑會有許多,通過這些路徑會選出一種最優的路徑來。
還根據連線的型別,給出的JoinType資料結構
這些節點之間的關係
這些資料結構之間的關係
瞭解了這些主要的資料結構之後,後續的內容還需要回來繼續對比才能更好的理解這裡的設計的邏輯。