資料庫查詢編譯原理
查詢編譯的三個步驟:
SQL -> AST樹(抽象語法樹)-> 邏輯查詢計劃 -> 物理執行計劃
1、SQL -> AST樹
對使用諸如SQL的某種語言書寫的查詢進行語法分析,即將查詢語句轉換成按某種有用方式表示查詢語句結構的語法樹。
2、AST樹 -> 邏輯查詢計劃
把語法分析樹轉換成關係代數表示式樹。
SQL -> 分析器 --> AST樹 -> 前處理器 -> 邏輯查詢計劃生成器 -> 查詢重寫器 -> 邏輯查詢計劃
3、邏輯查詢計劃 -> 物理執行計劃
物理查詢計劃不僅指明瞭要執行的操作,而且也找出了這些操作執行的順序、執行每步所用的演算法、獲得所儲存資料的方式以及資料從一個操作傳遞給另一個操作的方式
第一個步驟有一個確定的結果,後面兩個步驟涉及多種選擇。在挑選一個邏輯查詢計劃時,我們有機會應用多個不同的代數運算,目標是得到最佳的邏輯查詢計劃。當從一個邏輯計劃產生物理計劃時,有多種可能的執行方式,我們必須估計每個可能選項的預計代價。
1 語法分析
將類似SQL這樣的語言編寫的文字轉換成語法分析樹。
如可將SQL語句“ SELECT movieTitle From StarsIn,MovieStar Where starName = name AND birthdate LIKE '%1960' ”轉換成如下語法樹:
2 用於改進查詢計劃的代數定律
在得到語法樹以後,我們需要將其轉換成一個表示式,該表示式由關係代數運算子組成。應用啟發式規則,可以使用一些代數定律來改進語句中的代數表示式,從而生成更有效的物理查詢計劃。應用這些代數變換式的結果是邏輯查詢計劃,它是查詢重寫階段的輸出。
2.1 交換律與結合律
關係代數的多個運算子同時滿足結合律和交換律:
2.2 分解定律
(可選)
2.3 下推選擇
由於選擇可以明顯減少關係的大小,因此只要不改變表示式的結果,就把選擇在語法樹上儘可能地下移。然而,當查詢包含虛檢視時,有時先將選擇儘可能往樹的上部移是很必要的,然後再把選擇下推到所有可能的分支。
選擇下推到每個引數可能是可選的或必須的:
1、對於並,選擇必須下推到兩個引數中。
2、對於差,選擇必須下推到第一個引數,下推到第二個引數是可選的。
3、對於其他運算子,只要求選擇下推到其中一個引數。
2.4 下推投影
投影可以像選擇一樣下推到多個其他運算中。下推投影不如下推選擇那麼有用,因為投影不改變元組數,只減少元組的長度。
2.5 有關連線與積的定律
計算連線的演算法通常比計算積之後跟著一個對該積的結果的選擇的演算法要快的多。
2.6 有關消除重複的定律
消除重複下推可減少中間關係的大小。
2.7 涉及分組與聚集的定律
3 從語法分析樹到邏輯查詢計劃
講語法樹轉換成所希望的邏輯查詢,需要分兩步:
a) 按適當的群組用一個或多個關係代數運算子替換語法樹上的節點與結構,生成關係代數表示式。
b) 利用代數定律,將第一步產生的關係代數表示式轉換成我們所期望的一個表示式,它將被轉換成物理查詢計劃。