資料庫查詢核心概念-地圖理論

前文

我認為 DB query optimizer (QO) 產生執行計畫並執行查詢和 使用地圖找尋最佳路徑很類似

下面會跟大家分享我心中 地圖理論 希望可以對於想了解 DB 運作的人更快上手

看見全貌

在了解一個事情跟技術,我們需要先用宏觀的角度來看待事情

下圖是 postgresql DB 運作核心概念圖

其中在執行語法前後最重要的幾個步驟是

  1. Parser:檢查語法是否有錯誤,如果錯誤就不執行後續步驟
  2. ReWriter:嘗試優化改寫 SQL
  3. Planner:利用統計資訊 & 演算法建立執行計畫
  4. Executor:挑選一個成本最低的執行計劃來查找資料

我認為資料 Search Engine 的 Planner & Executor 核心概念跟查找地圖( google map 很類似 )

用生活例子,假如我們要從市政府到台北車站

我們可以利用不同的交通工具前往目的

  • 汽車

  • 公車

  • 腳踏車

google map 針對每種交通工具推薦時間成本最低路線給使用者,那 google map 是怎麼估算預估時間?

這邊提一個小問題給大家,上面 google map 有三種計畫你會選擇哪一種?

google map 利用目前使用 google 服務用戶在路徑上資料,經過複雜算法估算出預估時間成本最小的一條路來推薦給使用者

google map 目前預估時間已經比之前精準許多,但有時候還是不太準那是因為這只是估算

細心的人會發現上面有許多地方我用粗體標示,因為這是我要說明的重點

  • google 服務用戶在路徑上資料 => 資料分布統計資訊
  • 複雜算法 => 執行計畫演算法
  • 預估時間成本 => 執行計畫成本

資料庫有兩種執行計畫分類

  • 預估執行計畫
  • 實際執行計畫

預估計畫跟實際計畫一般來說會有些差距,但我們會希望兩者差距越小越好,所以我們就必須知道預估計畫是怎麼算出來的

資料庫預估計畫仰賴兩個部分 資料分布統計資訊 + 查詢演算法公式

下圖是一個簡單的 Join 執行計畫,查詢會使用到許多操作,至於為何 QO 會選擇這個計畫是我們需要了解的

有時候 QO 會推薦一個很慢的執行計畫,這就需要我們了解這個計畫是否合理,如果不合理就透過一些手段讓他走我們想要的執行計畫
至於上面為何選擇這個執行計畫我們就必須查看 統計資訊 + Index 才可以知道,日後有機會在跟大家分享

我上面有提一個問題,上面 google map 有三種計畫你會選擇哪一種?

如果是時間成本考量你可能會選擇汽車,但假如換另一種價格成本思考可能就會選擇腳踏車,如果是依照 時間成本 + 價格成本 公車可能是最佳方式

成本這個東西就很重要,因為成本會決定我們如何選擇計畫, DB query optimizer 一樣會被成本影響使用執行計畫

在 postgresql DB 有成本因子可以讓我們調成預估成本,關於如何調整我有篇文章在說明 postgresql 執行計畫重要因子 (成本因子調教)

小結

整個資料庫有許多複雜的元素組成,本篇是用一個簡單的概念先啟個頭

希望經過上面解說能讓讀者了解我的地圖理論,用地圖方式理解 DB 如何決定執行計畫並運作是一個很重要的基礎概念

日後有機會再跟大家分享更多細節

此文作者:Daniel Shih(石頭)
此文地址https://isdaniel.github.io/map-theory/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^