cmu15545筆記-查詢執行(Query Excution)

咪啪魔女發表於2024-11-18

目錄
  • 執行模型
    • Iterator Model
    • Materialization Model
    • Vectoriazation Model
    • 對比
  • 資料訪問方式
    • Sequential Scan
    • Index Scan
    • Multi-Index Scan
  • Halloween Problem
  • 表示式求值

執行模型

執行模型(Processing Model)定義了資料庫系統如何執行一個查詢計劃。

Iterator Model

基本思想:採用樹形結構組織運算子,然後中序遍歷執行整棵樹,最終根結點的輸出就是整個查詢計劃的結果。

每個運算子(Operator)實現如下函式:

  • Next()
    • 返回值:一個tuple或者EOF。
    • 執行流程:迴圈呼叫孩子結點的Next()函式。
  • Open()Close():類似於構造和解構函式。

image-20241118105113714

輸出從底部向頂部(Bottom-To-Top)匯聚,且支援流式操作,所以又稱為Valcano Model,Pipeline Model。

Materialization Model

基本思想:運算子不是一次返回一個資料,暫存下所有資料,一次返回給父結點。

相比於Iterator Model,減少了函式呼叫開銷,但是中間結果可能要暫存磁碟,IO開銷大。

image-20241118105733041

可以向下傳遞一些暗示(hint),如Limit,避免掃描過多的資料。

更適用於OLTP而不是OLAP。

Vectoriazation Model

基本思想:運算子返回一批資料。

結合了Iterator Model和Materialization Model的優勢,既減少了函式呼叫,中間結果又不至於過大。

可以採用SIMD指令加速批資料的處理。

image-20241118110928540

對比

特性 Iterator Model Materialization Model Vectorization Model
資料處理單位 單條記錄(tuple-at-a-time) 整個中間結果(table-at-a-time) 批次記錄(vector/batch-at-a-time)
效能 函式呼叫開銷高,效率低 延遲高,記憶體/I/O 開銷大 函式呼叫開銷低,SIMD 加速效能優異
記憶體使用 記憶體需求低 記憶體需求高 中等
I/O 開銷 中等
快取利用率
複雜性 實現簡單 中等 實現複雜
適用場景 小型資料集,流式處理 中間結果複用的複雜查詢 大型資料集,需高效能運算的場景

資料訪問方式

主要有三種資料訪問方式:

  1. 全表掃描(Sequential Scan)
  2. 索引掃描(Index Scan)
  3. 多索引掃描(Multi-Index Scan)

Sequential Scan

全表掃描的最佳化手段:

image-20241118113337122

Data Skipping方法:

  1. 只需要大致結果:取樣估計。
  2. 精確結果:Zone Map

image-20241118113508953

Zone Map基本思想:化整為零,提前對資料頁進行聚合。

執行 Select * From table Where val > 600時,下面的頁可以直接跳過。

image-20241118113722074

Index Scan

如何確定使用哪個索引:資料分佈。

image-20241118114047331

Multi-Index Scan

基本思想:根據每個索引上的謂詞,獨立找到滿足條件的資料記錄(Record),然後根據連線謂詞進行操作(並集,交集,差集等)。

image-20241118114343292

Halloween Problem

對於UPDATE語句,需要追蹤更新過的語句,否則會出現級聯更新的問題。

image-20241118114850271

<999, Andy>執行更新,走索引掃描:

  1. 移除索引
  2. 更新Tuple,<1099, Andy>
  3. 插入索引
  4. (約束檢查)

此時,如果不對<1099, Andy>進行標記,他滿足Where子句,會被重新更新一次。

表示式求值

基本思想:採用樹形結構,構建表示式樹,用中序遍歷方式執行所有求值動作,根結點的求值結果就是最終值。

image-20241118115507962

資料庫中哪些地方採用了樹結構:

  • B+樹:儲存。
  • 樹形結構+中序遍歷求值:查詢計劃,表示式求值。

最佳化手段:JIT Compilatoin。將熱點表示式計算結點視為函式,編譯為內聯機器碼,而不是每次都遍歷結點。

image-20241118120356183

相關文章