1. 程式人生 > >Postgre查詢優化器 --中篇 資料結構

Postgre查詢優化器 --中篇 資料結構

上篇簡單的介紹了PG的查詢架構,以及優化的過程,本篇將從資料結構角度分析,查詢優化器的工作過程。本節的重點在於所提到的資料結構之間的關係,在整個PG架構裡的作用。

主要的資料結構

作為查詢優化器的4個重要的資料結構,前一篇提到的左深樹等樹的結構,那基本的資料結構肯定有list,node等。查詢樹,關係物件,連線關係物件,查詢執行計劃
而基本的資料結構是list。定義如下:在這裡插入圖片描述
以及定義了listCell的資料結構
在這裡插入圖片描述
另外一種常用的資料結構是Node,提供頭部結構的存放物件
在這裡插入圖片描述
還有標誌SQL語句的命令型別CmdType在這裡插入圖片描述
介紹完基本的資料結構,查詢樹的資料結構就可以使用上面提及的來表示
在這裡插入圖片描述

表物件,索引物件資料結構

PG在不同的查詢優化階段的物件資料結構,比如範圍表,這個是一個查詢物件,在這裡插入圖片描述

表示一種在查詢過程中的虛擬關係的資料結構
在這裡插入圖片描述

針對索引設計的索引資料結構
在這裡插入圖片描述
提到的這些資料結構,從作用方面對比如下
在這裡插入圖片描述

連線操作相關的資料結構

跟連線相關的資料結構,這個肯定是跟JOIN,WHERE,HAVING等條件約束有關,這裡就產生一個約束條件物件在這裡插入圖片描述

根據多表之間的關聯,連線的資訊相關的資料結構,特定連線資訊資料結構
在這裡插入圖片描述

上面提到了,連線的資訊,連線的物件,這裡還有補充是連線的路徑
在這裡插入圖片描述
而針對這些路徑提供排序的物件,這裡體現在遺傳演算法的“優勝劣汰”,這裡的排序路徑會有許多,通過這些路徑會選出一種最優的路徑來。
在這裡插入圖片描述

還根據連線的型別,給出的JoinType資料結構
在這裡插入圖片描述

這些節點之間的關係
在這裡插入圖片描述

這些資料結構之間的關係
在這裡插入圖片描述
瞭解了這些主要的資料結構之後,後續的內容還需要回來繼續對比才能更好的理解這裡的設計的邏輯。