【高級數據庫】第三章 查詢執行

【高級數據庫】第三章 查詢執行

  第二章主要講解如何在文件上添加索引來提高操作效率。第三章和第四章將主要講解查詢的實現細節。

第01講 查詢計劃

1、查詢編譯預覽

  查詢編譯執行可分爲三個步驟:
(1)分析:建立查詢的分析樹;
(2)查詢重寫:分析樹被轉化爲初始查詢計劃,通常是查詢的代數表達式;然後初始查詢計劃被轉化爲一個預期所需執行時間最小的等價的計劃;
(3)物理計劃生成:根據上一步的抽象的查詢計劃,對每一個字符選擇實現算法,並選擇這些操作符的執行順序,將邏輯查詢計劃轉化爲物理查詢計劃。物理計劃用表達樹表示。
  操作符的劃分:
(1)一次單個元組(一元操作):例如選擇和投影不需要一次在內存中裝入整個關係;
(2)整個關係(一元操作):需要一次性從內存中看到所有或大部分元組,例如分組操作和去重操作;
(3)整個關係(二元操作):例如並、交、差、連接和積;

2、物理查詢計劃

2.1 掃描表:

  查詢整個表操作,讀取關係R中滿足指定謂詞的元組,包含兩種方法:
(1)表-掃描:根據元組存放的塊,系統一個一個獲取這些塊;
(2)索引-掃描:若R上任意一個屬性有索引,則可以使用索引得到所有元組;
  當掃描表時需要排序時(ORDER BY),採用物理查詢計劃操作符“排序-掃描”,實現方法:先用表掃描或索引掃描獲得所有元組,然後在內存(或外存)進行排序;

2.2 操作符I/O代價

  表達操作符代價的參數(統計數據):
(1)描述一個關係R的大小時,關係R所有元組所需要的塊的數目,表示 B(R)B(R),簡單描述爲 BB 。假設R是聚集的,即R存儲在 BB 個塊中。
(2)描述一個關係R的大小時,關係R所有元組的數目,表示爲 T(R)T(R) 簡單描述爲 TT ,一個塊中可以容納的元組數則爲 B/TB/T
(3)對於關係R的某一個屬性a,屬性a對應不同取值的數目,表示爲 V(R,a)V(R, a)
  操作I/O代價:
(1)表-掃描:如果R是聚集的,I/O代價爲 BB ;如果不是聚集的,則代價爲 TT
(2)索引——掃描:BBTT

3、一趟算法

3.1 一次單個元組一元操作

在這裏插入圖片描述

  一次讀取R的一塊到緩衝區,然後對每個元組進行操作,並將選擇/投影操作執行的結果元組移至輸出緩衝區。如果R是聚集的,在磁盤讀取塊時,I/O代價爲 BB ,否則爲 TT

3.2 整個關係的一元操作

(1)去重:
在這裏插入圖片描述
從磁盤中讀取R的一塊,並輸入到輸入緩衝區,然後遍歷所有元組,噹噹前元組從未出現,則複製到緩衝區中保存副本,若已出現則跳過。每次檢查當前元組是否出現均需要掃描副本緩衝區,可設置散列表降低時間開銷。

3.3 二元操作

  假設兩個關係 RRSS 滿足的二元操作,先取其中較小的操作數讀入內存中,併爲其建立一個合適的數據結構,支持刪除和檢索(散列表或平衡二叉樹)。
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章