查詢優化

raindayinrain發表於2020-10-09
優化一方面在關係代數級別發生
一方面在實現策略上

概述

考慮下面查詢
找出Music系的所有教師名字及每個教師所教授課程名稱的關係表示式
π_{name, title}(σ_{dept_name = "Music"}(instructor⋈(teches⋈π_{course_id, title}(course))))
另一種表達
π_{name, title}((σ_{dept_name = "Music"}(instructor)) ⋈ (teaches ⋈ π_{course_id, title}(course)))

在這裡插入圖片描述

一個執行計劃確切地定義了每個運算應使用的演算法
及運算間的協調

在這裡插入圖片描述

給定一個關係代數表示式
查詢優化器的任務是產生一個查詢執行計劃
該計劃能獲得與原關係表示式相同的結果,且執行代價優秀

查詢執行計劃的產生有三步
- 產生邏輯上與給定表示式等價的表示式
- 對所產生的表示式以不同的方式作註釋
,產生不同的查詢計劃
- 估計每個執行計劃的代價,
選擇估計代價最小的一個

等價規則說明了如何將一個表示式轉換成邏輯上等價的另一個表示式

關係表示式的轉換

一個查詢可表示成多種不同形式,每種形式有不同的執行代價
如兩個關係表示式在每一個有效資料庫例項中都會產生相同的元組集
稱它們是等價的

在SQL語言中,
輸入和輸出都是元組的多重集合
關係代數的多重集合版本用於評估SQL查詢

若對任意有效的資料庫,兩個表示式產生相同的元組多重集合,
則稱多重集合版本的這兩個關係代數表示式是等價的

等價規則

指出兩種不同形式的表示式是等價的
可用第二種形式的表示式代替第一種
可用第一種形式的表示式代替第二種
優化器利用等價規則將表示式轉換成邏輯上等價的其他表示式

下面列出關係代數表示式的一些通用等價規則
用θ,θ_{1},θ_{2}等表示謂詞
L_{1},L_{2},L_{3}等表示屬性列表
而E,E_{1},E_{2}等表示關係代數表示式
關係名r是關係代數表示式的特例
在E出現的任何地方它都可以出現

在這裡插入圖片描述

- 合取選擇運算可分解為單個選擇運算的序列
σ_{θ_{1}∧θ_{2}}(E) = σ_{θ_{1}}(σ_{θ_{2}}(E))
- 選擇運算滿足交換律
σ_{θ_{1}}(σ_{θ_{2}}(E)) = σ_{θ_{2}}(σ_{θ_{1}}(E))
- 一系列投影運算中只有最後一個運算是必需的,其餘的可省略
π_{L_{1}}(π_{L_{2}}(...(π_{L_{n}}(E))...))=π_{L_{1}}(E)
- 選擇操作可與笛卡爾積及θ連線相結合
a.σ_{θ}(E_{1} * E_{2})  = E_{1} ⋈_{θ} E_{2}
b.σ_{θ1}(E_{1} ⋈_{θ2} E_{2}) = E_{1} ⋈_{θ1∧θ2}E_{2}
- θ連線運算滿足交換律
E_{1} ⋈_{θ} E_{2} = E_{2} ⋈_{θ} E_{1}

- 
a.自然連線運算滿足結合律
(E_{1} ⋈ E_{2}) ⋈ E_{3} = E_{1} ⋈ (E_{2} ⋈ E_{3})
b.θ連線具有以下方式的結合律
(E_{1} ⋈_{θ1} E_{2}) ⋈_{θ2∧θ3} E_{3} = E_{1} ⋈_{θ1∧θ3} (E_{2} ⋈_{θ2} E_{3})
其中θ2只涉及E_{2}和E_{3}的屬性
由於其中任意一個條件都可為空,
故笛卡爾積運算也滿足結合女
連線運算滿足結合律,交換律在查詢優化中對重排連線順序很重要
- 選擇運算在下面兩個條件下對θ連線具有分配律
a.當選擇條件θ_{0}中的所有屬性只涉及參與連線運算的表示式之一時,
滿足分配律:
σ_{θ0}(E_{1} ⋈_{θ} E_{2}) = (σ_{θ0}(E_{1})) ⋈_{θ} E_{2}
b.當選擇條件θ1只涉及E_{1}的屬性
選擇條件θ2只涉及E_{2}的屬性時,滿足分配律
σ_{θ1∧θ2}(E_{1} ⋈_{θ} E_{2}) = (σ_{θ1}(E_{1})) ⋈_{θ} (σ_{θ2}(E_{2}))
- 投影運算在下面條件下對θ連線運算具有分配律
...

轉換的例子

若一組等價規則中任意一條規則都不能由其他規則聯合起來匯出,
稱這組等價規則集是最小的

連線的次序

等價表示式的列舉

查詢優化器使用等價規則系統地產生與給定表示式等價的表示式

表示式結果集統計大小的估計

相關文章