本篇說明伺服器如何規劃並執行 SQL 查詢:有哪些資料存取方法、可用哪些連接方法,以及蒐集到的統計資訊如何被運用。

本篇涵蓋#

  • 查詢執行階段——示範資料庫介紹、簡單查詢協定的四個階段(剖析、轉換、規劃、執行)、成本估算與基數估算的原理,以及延伸查詢協定帶來的預備語句、參數綁定與通用計畫。
  • 統計資訊——規劃器賴以估算的基礎統計、NULL 比例、相異值、最常見值(MCV)、直方圖、相關性、運算式統計與多變量統計。
  • 表格存取方法——可插拔儲存引擎、循序掃描與其成本估算、平行計畫的機制與限制。
  • 索引存取方法——索引的可擴充性、運算子類別與運算子族、索引引擎介面與各層級屬性。
  • 索引掃描——一般索引掃描(含相關性的好壞情境)、唯索引掃描、點陣圖掃描、平行索引掃描與各存取方法的比較。
  • 巢狀迴圈——連接的類型與方法、巢狀迴圈連接、參數化連接、記憶化(memoization)、外連接與反連接/半連接。
  • 雜湊——單趟與雙趟雜湊連接、動態調整、平行計畫中的雜湊連接,以及雜湊聚合。
  • 排序與合併——各種排序演算法、合併連接、平行化,以及分組與去重。

貫穿本篇的核心是:規劃器以「成本」為單一比較尺度,而成本又建立在基數(cardinality)與選擇性(selectivity)的估算之上。多數糟糕的計畫並非演算法選錯,而是估算錯了——這也是為什麼「統計資訊」在本篇佔據如此關鍵的位置。