1. 程式人生 > >第九章-----關係處理和查詢優化

第九章-----關係處理和查詢優化

關係資料庫系統的查詢處理
查詢處理步驟
關係資料庫管理系統查詢處理階段 :
1.查詢分析
2.查詢檢查
3.查詢優化
4.查詢執行

實現查詢操作的演算法示例
1.選擇操作的實現
選擇操作典型實現方法:
(1) 全表掃描方法 (Table Scan)
(2)索引掃描方法 (Index Scan)

2.連線操作的實現

關係資料庫系統的查詢優化
查詢優化概述
關係系統的查詢優化
是關係資料庫管理系統實現的關鍵技術又是關係系統的優點所在
減輕了使用者選擇存取路徑的負擔
關係資料庫管理系統通過某種代價模型計算出各種查詢執行策略的執行代價,然後選取代價最小的執行方案
集中式資料庫
執行開銷主要包括
磁碟存取塊數(I/O代價)
處理機時間(CPU代價)
查詢的記憶體開銷
I/O代價是最主要的 
分散式資料庫
總代價=I/O代價+CPU代價+記憶體代價+通訊代價
查詢優化的總目標
選擇有效的策略
求得給定關係表示式的值
使得查詢代價最小(實際上是較小)

一個例項
1.第一種情況
Q1=πSname(σStudent.Sno=SC.Sno∧SC.Cno=‘2’ (Student×SC))
(1) 計算廣義笛卡爾積
(2)作選擇操作
(3)作投影操作
2.第二種情況
Q2=πSname(σSc.Cno=‘2’ (Student SC))
(1)計算自然連線
(2)讀取中間檔案塊,執行選擇運算,讀取的資料塊=
103 塊
(3)把第2步結果投影輸出。
3.第三種情況
Q3=πSname(Student σSC.Cno=‘2’(SC))
(1)先對SC表作選擇運算,只需讀一遍SC表,存取
100塊,因為滿足條件的元組僅50個,不必使用中
間檔案。
(2)讀取Student表,把讀入的Student元組和記憶體中
的SC元組作連線。也只需讀一遍Student表共100
塊。
(3)把連線結果投影輸出
代數優化
關係代數表示式等價變換規則
代數優化策略:通過對關係代數表示式的等價變換來提高查詢效率
關係代數表示式的等價:指用相同的關係代替兩個表示式中相應的關係所得到的結果是相同的
兩個關係表示式E1和E2是等價的,可記為E1≡E2
常用的等價變換規則:
1.連線、笛卡爾積交換律
2.連線、笛卡爾積的結合律
3.投影的串接定律
4.選擇的串接定律
5.選擇與投影操作的交換律

選擇與笛卡爾積的交換律

選擇與並的分配律

選擇與差運算的分配律

選擇對自然連線的分配律

投影與笛卡爾積的分配律

投影與並的分配律

查詢樹的啟發式優化
典型的啟發式規則
(1)選擇運算應儘可能先做
在優化策略中這是最重要、最基本的一條。
(2)把投影運算和選擇運算同時進行
如有若干投影和選擇運算,並且它們都對同一個關係操作,則可以在掃描此關係的同時完成所有的這些運算以避免重複掃描關係。
(3) 把投影同其前或其後的雙目運算結合起來,沒有必要為了去掉某些欄位而掃描一遍關係。
(4) 把某些選擇同在它前面要執行的笛卡爾積結合起來成為一個連線運算,連線特別是等值連線運算要比同樣關係上的笛卡爾積省很多時間。
(5) 找出公共子表示式
如果這種重複出現的子表示式的結果不是很大的關係
並且從外存中讀入這個關係比計算該子表示式的時間少得多
則先計算一次公共子表示式並把結果寫入中間檔案是合算的。
當查詢的是檢視時,定義檢視的表示式就是公共子表示式的情況
-優化的一般步驟
(1)把查詢轉換成某種內部表示
1)FROM STUDENT,SC ≡ STUDENT×SC
2)σ STUDENT.SNO=SC.SNO ∧ SC.CNO=‘2’ (STUDENT×SC)
3)SELECT SNAME≡∏SNAME

物理優化
代數優化改變查詢語句中操作的次序和組合,不涉及底層的存取路徑
對於一個查詢語句有許多存取方案,它們的執行效率不同, 僅僅進行代數優化是不夠的
物理優化就是要選擇高效合理的操作演算法或存取路徑,求得優化的查詢計劃

物理優化方法
基於規則的啟發式優化
基於代價估算的優化
兩者結合的優化方法

基於啟發式規則的存取路徑選擇優化
1.選擇操作的啟發式規則
對於小關係,使用全表順序掃描,即使選擇列上有索引
對於大關係,啟發式規則有:
(1)對於選擇條件是“主碼=值”的查詢
(2)對於選擇條件是“非主屬性=值”的查詢,並且選擇列上有索引
(3)對於選擇條件是屬性上的非等值查詢或者範圍查詢,並且選擇列上有索引
(4)對於用AND連線的合取選擇條件
(5)對於用OR連線的析取選擇條件,一般使用全表順序掃描
2.連線操作的啟發式規則
(1)如果2個表都已經按照連線屬性排序
選用排序-合併演算法
(2)如果一個表在連線屬性上有索引
選用索引連線演算法
(3)如果上面2個規則都不適用,其中一個表較小
選用Hash join演算法
(4)可以選用巢狀迴圈方法,並選擇其中較小的表,確切地講是佔用的塊數(b)較少的表,作為外表(外迴圈的表) 。