資料庫 關係資料庫系統的查詢處理

2021-07-02 07:24:54 字數 2967 閱讀 6034

本章目的:

rdbms的查詢處理步驟

查詢優化的概念

基本方法和技術

查詢優化分類 :

代數優化

物理優化

rdbms查詢處理階段 :

1. 查詢分析

2. 查詢檢查

3. 查詢優化

4. 查詢執行

對查詢語句進行掃瞄、詞法分析和語法分析

從查詢語句中識別出語言符號

進行語法檢查和語法分析

根據資料字典對合法的查詢語句進行語義檢查

根據資料字典中的使用者許可權和完整性約束定義對使用者的訪問許可權進行檢查

檢查通過後把sql查詢語句轉換成等價的關係代數表示式

rdbms一般都用查詢樹(語法分析樹)來表示擴充套件的關係代數表示式

把資料庫物件的外部名稱轉換為內部表示

查詢優化:選擇乙個高效執行的查詢處理策略

查詢優化分類 :

代數優化:指關係代數表示式的優化

物理優化:指訪問路徑和底層操作演算法的選擇

查詢優化方法選擇的依據:

基於規則(rule based)

基於代價(cost based)

依據優化器得到的執行策略生成查詢計畫

**生成器(code generator)生成執行查詢計畫的**

[例1]select * from student where

《條件表示式》 ;

考慮《條件表示式》的幾種情況:

c1:無條件;

c2:sno='200215121';

c3:sage>20;

c4:sdept='cs'

and sage>20;

選擇操作典型實現方法:

1. 簡單的全表掃瞄方法

對查詢的基本表順序掃瞄,逐一檢查每個元組是否滿足選擇條件,把滿足條件的元組作為結果輸出

適合小表,不適合大表

2. 索引(或雜湊)掃瞄方法

適合選擇條件中的屬性上有索引(例如b+樹索引或hash索引)

通過索引先找到滿足條件的元組主碼或元組指標,再通過元組指標直接在查詢的基本表中找到元組

[例1

-c2] 以c2為例,sno=『200215121』,並且sno上有索引(或sno是雜湊碼)

使用索引(或雜湊)得到sno為『200215121』 元組的指標

通過元組指標在student表中檢索到該學生

[例1-c3] 以c3為例,sage>

20,並且sage 上有b+樹索引

使用b+樹索引找到sage=20的索引項,以此為入口點在b+樹的順序集上得到sage>

20的所有元組指標

通過這些元組指標到student表中檢索到所有年齡大於20的學生。

[例1

-c4] 以c4為例,sdept=『cs』 and sage>

20,如果sdept和sage上都有索引:

演算法一:分別用上面兩種方法分別找到sdept=『cs』的一組元組指標和sage>

20的另一組元組指標

求這2組指標的交集

到student表中檢索

得到計算機系年齡大於20的學生

演算法二:找到sdept=『cs』的一組元組指標,

通過這些元組指標到student表中檢索

對得到的元組檢查另一些選擇條件(如sage>

20)是否滿足

把滿足條件的元組作為結果輸出。

連線操作是查詢處理中最耗時的操作之一

本節只討論等值連線(或自然連線)最常用的實現演算法

[例2]   select * from student,sc               

where student.sno=sc.sno;

對外層迴圈(student)的每乙個元組(s),檢索內層迴圈(sc)中的每乙個元組(sc)

檢查這兩個元組在連線屬性(sno)上是否相等

如果滿足連線條件,則串接後作為結果輸出,直到外層迴圈表中的元組處理完為止

適合連線的諸表已經排好序的情況

排序-合併連線方法的步驟:

如果連線的表沒有排好序,先對student表和sc表按連線屬性sno排序

取student表中第乙個sno,依次掃瞄sc表中具有相同sno的元組

步驟:

① 在sc表上建立屬性sno的索引,如果原來沒有該索引

② 對student中每乙個元組,由sno值通過sc的索引查詢相應的sc元組

③ 把這些sc元組和student元組連線起來

迴圈執行②③,直到student表中的元組處理完為止

把連線屬性作為hash碼,用同乙個hash函式把r和s中的元組雜湊到同乙個hash檔案中

步驟:

劃分階段(partitioning phase):

對包含較少元組的表(比如r)進行一遍處理

把它的元組按hash函式分散到hash表的桶中

試探階段(probing phase):也稱為連線階段(join phase)

對另乙個表(s)進行一遍處理

把s的元組雜湊到適當的hash桶中

把元組與桶中所有來自r並與之相匹配的元組連線起來

排序-合併連線方法的步驟(續):

當掃瞄到sno不相同的第乙個sc元組時,返回student表掃瞄它的下乙個元組,再掃瞄sc表中具有相同sno的元組,把它們連線起來

重複上述步驟直到student 表掃瞄完

student表和sc表都只要掃瞄一遍

如果2個表原來無序,執行時間要加上對兩個表的排序時間

對於2個大表,先排序後使用sort-merge join方法執行連線,總的時間一般仍會大大減少

上面hash join演算法前提:假設兩個表中較小的表在第一階段後可以完全放入記憶體的hash桶中

關係資料庫系統

關係資料庫系統的發展歷史 關係資料模型 資料模型 資料結構 資料操作 完整性約束 資料結構 層次,網狀,關係,物件 資料操作 ddl,dml 完整性約束 實體完整性 主鍵存在,參照完整性 外來鍵引用存在,使用者定義完整性 關係資料模型 關係資料結構 資料操作 完整性約束 關係模型的資料結構和基本術語...

資料庫系統概念 關聯式資料庫

database system concepts 6e 總結 本篇是 資料庫系統概念 原版書籍第一部分,這一部分介紹了關係模型的基礎知識,介紹了最普遍的一種查詢語言 sql語言,以及關係代數。1.關聯式資料庫 a relational database consists of a collectio...

資料庫系統概論02 關聯式資料庫

笛卡爾積 a b 假設集合a 集合b 則兩個集合的笛卡爾積為。候選碼 關係中的某一屬性組的值能唯一標識乙個元組,而其子集不能。主碼 候選碼中選乙個 全碼 關係模式的所有屬性是這個關係模型的候選碼。關係的三種型別 基本關係 基本表 查詢表 檢視表 查詢 query 選擇 select 投影 proje...