數據庫系統概論(第九章關係查詢處理和查詢優化)

第9章 關係查詢處理和查詢優化

9.1 關係數據庫系統的查詢處理

9.1.1 查詢處理步驟 

關係數據庫管理系統查詢處理可以分爲4個階段:查詢分析、查詢檢查、查詢優化和查詢執行

  1. 查詢分析:詞法分析、語法分析
  2. 查詢檢查:語義分析、是否有權限、是否破壞完整性、視圖轉換
  3. 查詢優化:代數優化(邏輯優化)和物理優化(基於規則、代價、語義),生成查詢計劃樹
  4. 查詢執行:自底向上/自頂向下策略

這裏寫圖片描述

9.1.2 實現查詢操作的算法示例

  1. 選擇操作的實現:全表掃描/索引掃描
  2. 連接操作的實現:查詢處理中最常用最耗時的操作之一
    1. 嵌套循環算法:最簡單最通用,實際上都是基於數據塊的循環(m*n)
    2. 排序-合併算法:常用與等值連接,尤其適合各個表已經排好序的情況。(m+n)
      1. 第一步:如果參與連接的表沒有排好序,根據連接屬性排序
      2. 第二步:sorted_merge
    3. 索引連接算法:根據表上已經建立好的索引,根據索引查找匹配的元組
    4. hash join 算法:等值連接,要求內存足夠大,小表的hash表要全部能夠放進內存。分成兩個階段
      1. 第一步,劃分階段,爲小表建立hash表,根據連接屬性作爲hash碼
      2. 第二步,試探階段,對另外一張表的連接屬性hash一遍,將匹配的元組連接起來

9.2 關係數據庫系統的查詢優化

9.2.1 查詢優化概述

重要性:關係系統的查詢優化即是關係數據庫管理系統實現的關鍵技術,又是關係系統的優點所在。它減輕了用戶選擇存取路徑的負擔,用戶只要提出“幹什麼”,而不必指出“怎麼幹”,

由DBMS進行查詢優化的好處:

查詢優化的優點不僅在於用戶不必考慮如何最好的表達查詢以獲得較高的效率,而且在於系統可以比用戶程序的“優化”做得更好。

可能性:

  1. 優化器可以從數據字典中獲取許多統計信息,
  2. 如果數據庫的物理統計信息改變了,系統可以自動對查詢進行重新優化以選擇相適應的執行計劃。
  3. 優化器可以考慮數百種不同的執行計劃,而程序員一般只考慮有限的幾種可能性。
  4. 優化器中包括了很多複雜的優化技術。

在集中式數據庫中,查詢執行開銷主要包括磁盤存取塊數(IO代價)、處理機時間(CPU代價)以及查詢的內存開銷

計算查詢代價時一般用查詢處理讀寫的塊數作爲衡量單位

9.3 代數優化

9.3.1 關係代數表達式等價變換規則

這裏寫圖片描述

這裏寫圖片描述

9.3.2 查詢樹的啓發式優化

  1. 選擇運算應儘可能先做
  2. 把投影運算和選擇運算同時進行:這兩者都是一元操作,一個元組能不能成爲結果只取決於其本身
  3. 把投影同其前或後的雙目運算結合起來
  4. 把某些選擇同在它前面要執行的笛卡兒積結合起來稱爲一個連接運算
  5. 找出公共子表達式

這裏寫圖片描述

9.4 物理優化

9.4.1 基於啓發式規則的存取路徑選擇優化

選擇操作的啓發式規則:
對於小關係,全表掃描
對於大關係:
1. 若選擇條件是主碼,則可以選擇主碼索引,因爲主碼索引一般是被自動建立的
2. 若選擇條件是非主屬性的等職查詢,並且選擇列上有索引,如果選擇比例較小(10%)可以使用索引掃描,否則全表掃描
3. 若選擇條件是屬性上的非等職查詢或者範圍查詢,同上
4. 對於用and連接的合取選擇條件,若有組合索引,優先用組合索引方法;如果某些屬性上有一般索引,則用索引掃描,否則全表掃描
5. 對於用OR連接的析取選擇條件,全表掃描

連接操作的啓發式規則
1. 若兩個表都已經按連接屬性排序,則選用排序-合併算法
2. 若一個表在連接屬性上有索引,則使用索引連接方法
3. 若其中一個表較小,則選用hash join
4. 最後可以使用嵌套循環,小表坐外表

9.4.2 基於代價估算的優化

統計信息:數據字典中存儲了優化器需要的優化信息,包括基本表的元組總數、長度、佔用塊數,每個列的不同值的個數、最大/小值、是否有索引,索引的層數、個數、選擇基數等
代價估算實例
這裏寫圖片描述

 

習題

1 .試述查詢優化在關係數據庫系統中的重要性和可能性。

答:重要性:關係系統的查詢優化既是 RDBMS 實現的關鍵技術又是關係系統的優點所在。它減輕了用戶選擇存取路徑的負擔。用戶只要提出“幹什麼”,不必指出“怎麼幹”。查詢優化的優點不僅在於用戶不必考慮如何最好地表達查詢以獲得較好的效率,而且在於系統可以比用戶程序的“優化’夕做得更好。

可能性:這是因爲:

  • ( l )優化器可以從數據字典中獲取許多統計信息,例如關係中的元組數、關係中每個屬性值的分佈情況、這些屬性上是否有索引、是什麼索引( B +樹索引還是 HASH 索引或惟一索引或組合索引)等。優化器可以根據這些信息選擇有效的執行計劃,而用戶程序則難以獲得這些信息。
  • ( 2 )如果數據庫的物理統計信息改變了,系統可以自動對查詢進行重新優化以選擇相適應的執行計劃。在非關係系統中必須重寫程序,而重寫程序在實際應用中往往是不太可能的。
  • ( 3 )優化器可以考慮數十甚至數百種不同的執行計劃,從中選出較優的一個,而程序員一般只能考慮有限的幾種可能性。
  • ( 4 )優化器中包括了很多複雜的優化技術,這些優化技術往往只有最好的程序員才能掌握。系統的自動優化相當於使得所有人都擁有這些優化技術。
  •  

2 .對學生一課程數據庫有如下的查詢: SEI 王 CT Cn 即 ne FROM Student , Cou 拐 e , SC WHERE Student . Sno = SC . Sno AND SC . Cllo = Coll 拐 e . Cllo AND Stu 擊 nt . Sdept = ! 15 ! ; 此查詢要求信息系學生選修了的所有課程名稱。試畫出用關係代數表示的語法樹,並用關係代數表達式優化算法對原始的語法樹進行優化處理,畫出優化後的標準語法樹。

答:

 

 

3 .試述查詢優化的一般準則。

答:下面的優化策略一般能提高查詢效率:

  • ( l )選擇運算應儘可能先做;
  • ( 2 )把投影運算和選擇運算同時進行;
  • ( 3 )把投影同其前或其後的雙目運算結合起來執行;
  • ( 4 )把某些選擇同在它前面要執行的笛卡兒積結合起來成爲一個連接運算;
  • ( 5 )找出公共子表達式;
  • ( 6 )選取合適的連接算法。

4 .試述查詢優化的一般步驟。

答:各個關係系統的優化方法不盡相同,大致的步驟可以歸納如下:

  • ( l )把查詢轉換成某種內部表示,通常用的內部表示是語法樹。
  • ( 2 )把語法樹轉換成標準(優化)形式。即利用優化算法,把原始的語法樹轉換成優化的形式。
  • ( 3 )選擇低層的存取路徑。
  • ( 4 )生成查詢計劃,選擇代價最小的。

 

 

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