🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

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

前文

我認為 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 許可協議。轉載請註明出處!

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