數(shù)據(jù)庫系統(tǒng)教學課件:第12講-_關(guān)系查詢處理_第1頁
數(shù)據(jù)庫系統(tǒng)教學課件:第12講-_關(guān)系查詢處理_第2頁
數(shù)據(jù)庫系統(tǒng)教學課件:第12講-_關(guān)系查詢處理_第3頁
數(shù)據(jù)庫系統(tǒng)教學課件:第12講-_關(guān)系查詢處理_第4頁
數(shù)據(jù)庫系統(tǒng)教學課件:第12講-_關(guān)系查詢處理_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第12講: (第11章) 查詢處理(基本操作) 重慶大學計算機學院 課程名稱: 數(shù)據(jù)庫系統(tǒng) -1內(nèi)容目標基本過程代價度量基本關(guān)系代數(shù)運算的處理基本運算單表運算多表運算多運算表達式3RDBMS用戶或應用檢查語法和關(guān)系有效性 + 轉(zhuǎn)換為關(guān)系代數(shù)操作執(zhí)行優(yōu)化計劃,形成返回結(jié)果salary75000(salary(instructor) salary(salary75000(instructor)通過等價變換得到優(yōu)化執(zhí)行方案(操作執(zhí)行次序)含注釋是否需要采用索引查詢執(zhí)行計劃:執(zhí)行一個查詢的計算原語(標注了如何執(zhí)行的一個或多個關(guān)系代數(shù)操作)的操作序列一、Query Processing (查詢處理過程)

2、二、Measures of Query Cost (查詢代價度量)Cost is generally measured as total elapsed time for answering queryMany factors contribute to time costdisk accesses, CPU, or even network communicationTypically disk access is the predominant cost, and is also relatively easy to estimate. Measured by taking into ac

3、countNumber of seeks * average-seek-costNumber of blocks read * average-block-read-costNumber of blocks written * average-block-write-costCost to write a block is greater than cost to read a block data is read back after being written to ensure that the write was successfulMeasures of Query Cost (Co

4、nt.)For simplicity we just use the number of block transfers from disk and the number of seeks as the cost measurestT time to transfer one blocktS time for one seekCost for b block transfers plus S seeks b * tT + S * tS We ignore CPU costs for simplicityReal systems do take CPU cost into accountWe d

5、o not include cost to writing output to disk in our cost formulaeMeasures of Query Cost (Cont.)Several algorithms can reduce disk IO by using extra buffer space Amount of real memory available to buffer depends on other concurrent queries and OS processes, known only during executionWe often use wor

6、st case estimates, assuming only the minimum amount of memory needed for the operation is availableRequired data may be buffer resident already, avoiding disk I/OBut hard to take into account for cost estimation例1Select * from student where ;考慮的幾種情況: C1:無條件; C2:Sno200215121; C3:Sage20; C4:SdeptCS AN

7、D Sage20; 三、選擇運算的處理7選擇運算典型處理方法:1. 簡單的文件掃描方法 (線性搜索)對查詢的基本表順序掃描,逐一檢查每個元組是否滿足選擇條件,把滿足條件的元組作為結(jié)果輸出 適合小表,不適合大表2. 索引(或散列)掃描方法 適合選擇條件中的屬性上有索引(例如B+樹索引或Hash索引) 通過索引先找到滿足條件的元組主碼或元組指針,再通過元組指針直接在查詢的基本表中找到元組 選擇運算的處理(續(xù))8例1-C2 以C2為例,Sno200215121,并且Sno上有索引(或Sno是散列碼)使用索引(或散列)得到Sno為200215121 元組的指針通過元組指針在student表中檢索到該學

8、生例1-C3 以C3為例,Sage20,并且Sage 上有B+樹索引使用B+樹索引找到Sage20的索引項,以此為入口點在B+樹的順序集上得到Sage20的所有元組指針通過這些元組指針到student表中檢索到所有年齡大于20的學生。 選擇運算的處理(續(xù))9例1-C4 以C4為例,SdeptCS AND Sage20,如果Sdept和Sage上都有索引:算法一:分別用上面兩種方法分別找到SdeptCS的一組元組指針和Sage20的另一組元組指針求這2組指針的交集到student表中檢索得到計算機系年齡大于20的學生算法二:找到SdeptCS的一組元組指針,通過這些元組指針到student表中檢

9、索對得到的元組檢查另一些選擇條件(如Sage20)是否滿足把滿足條件的元組作為結(jié)果輸出。 選擇運算的處理(續(xù))1011ts+br*tT(hi+1)*(tT+ts)(hi*(tT+ts)+ts+b*tT(hi+n)*(tT+ts)ts+br*tT(hi+1)*(tT+ts)(hi*(tT+ts)+ts+b*tT(hi+n)*(tT+ts)ts+br*tThi*(ts+tT)+(ts+tT)hi*(ts+tT)+(ts+b*tT)hi*(ts+tT)+n*(ts+tT)各種等值比較情況的執(zhí)行開銷分析圖12-3ts+br*tT(hi+1)*(tT+ts)(hi*(tT+ts)+ts+b*tT(hi+

10、n)*(tT+ts)ts+br*tThi*(ts+tT)+(ts+tT)hi*(ts+tT)+(ts+b*tT)hi*(ts+tT)+n*(ts+tT)ts+br*tT(hi+1)*(tT+ts)(hi*(tT+ts)+ts+b*tT(hi+n)*(tT+ts)ts+br*tThi*(ts+tT)+(ts+tT)hi*(ts+tT)+(ts+b*tT)hi*(ts+tT)+n*(ts+tT)ts+br*tThi*(ts+tT)+(ts+tT)hi*(ts+tT)+(ts+b*tT)hi*(ts+tT)+n*(ts+tT)ts-搜索1個磁盤塊的時間tT-傳輸1個磁盤塊的時間ts+br*tThi*

11、(ts+tT)+(ts+tT)hi*(ts+tT)+(ts+b*tT)hi*(ts+tT)+n*(ts+tT)ts-搜索1個磁盤塊的時間tT-傳輸1個磁盤塊的時間hi*(ts+tT)+(ts+tT)涉及范圍比較的選擇運算各種算法執(zhí)行代價分析12hi*(ts+tT)+(ts+b*tT)hi*(ts+tT)+n*(ts+tT)n-所取記錄數(shù)第1項-找到滿足A=v的首條記錄第1項-找到滿足A=v的首條記錄b-包含具有指定搜 索碼記錄的塊數(shù)第1項-找到滿足A=v的首條記錄第1項-找到滿足A=v的首條記錄連接運算是查詢處理中最耗時的操作之一 只討論等值連接(或自然連接)最常用的實現(xiàn)算法 1. 嵌套循環(huán)方

12、法(nested loop) 2.索引連接(index join)方法 3.排序-合并方法(sort-merge join 或merge join) 4. Hash Join方法 四、 連接運算的處理 1314for each tuple tr in r do begin for each tuple ts in s do begin test pair (tr , ts) to see if they satisfy the join condition if they do, add tr ts to the result. endendr-外層關(guān)系s-內(nèi)層關(guān)系分析案例:嵌套循環(huán)連接的代價

13、估算圖12-5 嵌套循環(huán)連接1.嵌套循環(huán)連接算法r s15嵌套循環(huán)連接算法的代價估算worst case: if there is enough memory only to hold one block of each relation, the estimated cost : (br -包含r記錄的磁盤塊數(shù),nr - r的記錄數(shù)) nr bs + br block transfers, and (內(nèi)循環(huán)s讀nr 次+ 外循環(huán)關(guān)系r讀一次) nr + br seeks (讀s每次尋道1次,但循環(huán)nr次 + 讀r的所有塊尋道br 次)best case: if both relations

14、fit entirely in memory, use the smaller one as the inner relation s. Reduces cost to br + bs block transfers and 2 seeks (尋道兩次將兩關(guān)系連續(xù)全部讀進內(nèi)存中,且s和r都僅讀一次)例示:Assuming worst case memory availability cost estimate iswith student as the outer relation:5000 400 + 100 = 2,000,100 block transfers, and5000 + 10

15、0 = 5100 seeks with takes as the outer relation 更快!(因內(nèi)關(guān)系student更小)10000 100 + 400 = 1,000,400 block transfers, and 10000 + 400 = 10,400 seeksIn the best case, the cost estimate will be 400+100=500 block transfers. 一般把小關(guān)系作為內(nèi)層關(guān)系效率更高162.塊嵌套循環(huán)連接算法for each block Br of r do begin for each block Bs of s do

16、 begin for each tuple tr in Br do begin for each tuple ts in Bs do begin Check if (tr,ts) satisfy the join condition if they do, add tr ts to the result. end end endend圖12-6 塊嵌套循環(huán)連接如何改進嵌套循環(huán)連接算法?17塊嵌套循環(huán)連接算法的代價估算Worst case estimate: br bs + br block transfers and br+br =2*br seeksEach block in the inn

17、er relation s is read once for each block in the outer relationBest case: br + bs block transfers + 2 seeks(同嵌套循環(huán)). 比嵌套循環(huán)連接高效!*Improvements to nested loop and block nested loop algorithms:In block nested-loop, use M - 2 disk blocks as blocking unit for outer relations, where M = memory size in block

18、s; use remaining two blocks to buffer inner relation and output Cost = br / (M-2) bs + br block transfers and 2 br / (M-2) seeks*If equi-join attribute forms a key or inner relation, stop inner loop on first match*Scan inner loop forward and backward alternately, to make use of the blocks remaining

19、in buffer (with LRU replacement)*Use index on inner relation if available*上兩種算法還有改善余地嗎?嵌套循環(huán)連接代價:nr bs + br block transfers,and nr + br seeks算法步驟: 在內(nèi)表s上為連接屬性建立索引,如果原來沒有該索引 對外表r中每一個元組,由連接屬性值通過內(nèi)表的索引查找相應的內(nèi)表元組 把這些內(nèi)表元組和外表元組連接起來 循環(huán)執(zhí)行,直到外表r中的元組處理完為止 最壞情況下,內(nèi)存只能容納外表r的一塊和索引的一塊,因此,執(zhí)行代價為:其中,讀取r需要br次I/O操作, nr是外表r

20、中的記錄數(shù),c是用連接條件對內(nèi)表s進行單次選擇運算的執(zhí)行代價若兩個表均有索引時,一般把小關(guān)系作為外層關(guān)系效率更高3. 索引連接(index join)方法18適合連接的諸表已經(jīng)排好序的情況 排序合并連接方法的步驟:如果連接的表沒有排好序,先對r表和s表按連接屬性排序 取r表中第一個連接屬性值,依次掃描s表中具有相同屬性值的元組 當掃描到s表中不相同的第一個元組時,返回r表掃描它的下一個元組,再掃描s表中具有相同屬性值的元組,把它們連接起來 重復上述步驟直到r 表掃描完4. 排序-合并方法(sort-merge join 或merge join) 19代價分析:對兩表都只要掃描一遍,如果2個表原

21、來無序,執(zhí)行時間要加上對兩個表的排序時間對于2個大表,先排序后使用sort-merge join方法執(zhí)行連接,總的時間一般仍會大大減少 把連接屬性作為hash碼,用同一個hash函數(shù)把R和S中的元組散列到同一個hash文件中步驟:劃分階段(partitioning phase):對包含較少元組的表(比如R)進行一遍處理把它的元組按hash函數(shù)分散到hash表的桶中試探階段(probing phase):也稱為連接階段(join phase) 對另一個表(S)進行一遍處理把S的元組散列到適當?shù)膆ash桶中把元組與桶中所有來自R并與之相匹配的元組連接起來 上面hash join算法前提:假設兩個表

22、中較小的表在第一階段后可以完全放入內(nèi)存的hash桶中 以上的算法思想可以推廣到更加一般的多個表的連接算法上 205. 散列連接方法 21如何計算包含多個運算的表達式Materialized evaluation物化計算: evaluate one operation at a time, starting at the lowest-level. Use intermediate results materialized into temporary relations to evaluate next-level operations.E.g., in the figure below, c

23、ompute and storeThen compute the store its join with instructor, and store the second result Finally compute the projection on name. Materialization(物化)(若該結(jié)果關(guān)系很小,則不用寫入磁盤)(指中間結(jié)果)(基于新的中間結(jié)果)查詢優(yōu)化在關(guān)系數(shù)據(jù)庫系統(tǒng)中有著非常重要的地位 關(guān)系查詢優(yōu)化是影響RDBMS性能的關(guān)鍵因素 由于關(guān)系表達式的語義級別很高,使關(guān)系系統(tǒng)可以從關(guān)系表達式中分析查詢語義,提供了執(zhí)行查詢優(yōu)化的可能性 關(guān)系數(shù)據(jù)庫系統(tǒng)的查詢優(yōu)化22查詢優(yōu)化

24、的優(yōu)點不僅在于用戶不必考慮如何最好地表達查詢以獲得較好的效率,而且在于系統(tǒng)可以比用戶程序的“優(yōu)化”做得更好 (1) 優(yōu)化器可以從數(shù)據(jù)字典中獲取許多統(tǒng)計信息,而用戶程序則難以獲得這些信息(2)如果數(shù)據(jù)庫的物理統(tǒng)計信息改變了,系統(tǒng)可以自動對查詢重新優(yōu)化以選擇相適應的執(zhí)行計劃。在非關(guān)系系統(tǒng)中必須重寫程序,而重寫程序在實際應用中往往是不太可能的。查詢優(yōu)化概述23(3)優(yōu)化器可以考慮數(shù)百種不同的執(zhí)行計劃,程序員一般只能考慮有限的幾種可能性。(4)優(yōu)化器中包括了很多復雜的優(yōu)化技術(shù),這些優(yōu)化技術(shù)往往只有最好的程序員才能掌握。系統(tǒng)的自動優(yōu)化相當于使得所有人都擁有這些優(yōu)化技術(shù)查詢優(yōu)化概述24RDBMS通過某種代

25、價模型計算出各種查詢執(zhí)行策略的執(zhí)行代價,然后選取代價最小的執(zhí)行方案集中式數(shù)據(jù)庫執(zhí)行開銷主要包括:磁盤存取塊數(shù)(I/O代價)處理機時間(CPU代價)查詢的內(nèi)存開銷 I/O代價是最主要的 分布式數(shù)據(jù)庫總代價=I/O代價+CPU代價+內(nèi)存代價通信代價 查詢優(yōu)化概述25查詢優(yōu)化的總目標:選擇有效的策略求得給定關(guān)系表達式的值使得查詢代價最小(實際上是較小) 查詢優(yōu)化概述261. 將查詢轉(zhuǎn)換成某種內(nèi)部表示,通常是語法樹2. 根據(jù)一定的等價變換規(guī)則把語法樹轉(zhuǎn)換成標準 (優(yōu)化)形式3. 選擇低層的操作算法對于語法樹中的每一個操作計算各種執(zhí)行算法的執(zhí)行代價選擇代價小的執(zhí)行算法4. 生成查詢計劃(查詢執(zhí)行方案)查

26、詢計劃是由一系列內(nèi)部操作組成的。實際系統(tǒng)的查詢優(yōu)化步驟27例3 求選修了2號課程的學生姓名。用SQL表達: SELECT Student.Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno=2; 假定學生-課程數(shù)據(jù)庫中有1000個學生記錄,10000個選課記錄其中選修2號課程的選課記錄為50個 28系統(tǒng)可以用多種等價的關(guān)系代數(shù)表達式來完成這一查詢Q1=Sname(Student.Sno=SC.SnoSc.Cno=2 (StudentSC)Q2=Sname(Sc.Cno=2 (Student SC)Q3=Sname(Student

27、Sc.Cno=2 (SC)29一、第一種情況 Q1=Sname(Student.Sno=SC.SnoSc.Cno=2 StudentSC)1. 計算廣義笛卡爾積 把Student和SC的每個元組連接起來的做法:在內(nèi)存中盡可能多地裝入某個表(如Student表)的若干塊,留出一塊存放另一個表(如SC表)的元組。把SC中的每個元組和Student中每個元組連接,連接后的元組裝滿一塊后就寫到中間文件上從SC中讀入一塊和內(nèi)存中的Student元組連接,直到SC表處理完。再讀入若干塊Student元組,讀入一塊SC元組重復上述處理過程,直到把Student表處理完30設一個塊能裝10個Student元組

28、或100個SC元組,在內(nèi)存中存放5塊Student元組和1塊SC元組,則讀取總塊數(shù)為 =100+20100=2100塊其中,讀Student表100塊。讀SC表20遍,每遍100塊。若每秒讀寫20塊,則總計要花105s 連接后的元組數(shù)為103104=107。設每塊能裝10個元組,則寫出這些塊要用106/20=5104s 312. 作選擇操作 依次讀入連接后的元組,按照選擇條件選取滿足要求的記錄 假定內(nèi)存處理時間忽略。讀取中間文件花費的時間(同寫中間文件一樣)需5104s 滿足條件的元組假設僅50個,均可放在內(nèi)存 323. 作投影操作 把第2步的結(jié)果在Sname上作投影輸出,得到最終結(jié)果 第一種

29、情況下執(zhí)行查詢的總時間105+25104105s所有內(nèi)存處理時間均忽略不計 33二、 第二種情況 Q2=Sname(Sc.Cno=2 (Student SC)1. 計算自然連接 執(zhí)行自然連接,讀取Student和SC表的策略不變,總的讀取塊數(shù)仍為2100塊花費105 s 自然連接的結(jié)果比第一種情況大大減少,為104個 寫出這些元組時間為104/10/20=50s,為第一種情況的千分之一 2. 讀取中間文件塊,執(zhí)行選擇運算,花費時間也為50s。3. 把第2步結(jié)果投影輸出。 第二種情況總的執(zhí)行時間105+50+50205s 34三、 第三種情況 Q3=Sname(Student Sc.Cno=2(

30、SC)1. 先對SC表作選擇運算,只需讀一遍SC表,存取100塊花費時間為5s,因為滿足條件的元組僅50個,不必使用中間文件。2. 讀取Student表,把讀入的Student元組和內(nèi)存中的SC元組作連接。也只需讀一遍Student表共100塊,花費時間為5s。3. 把連接結(jié)果投影輸出 第三種情況總的執(zhí)行時間5+510s 35假如SC表的Cno字段上有索引第一步就不必讀取所有的SC元組而只需讀取Cno=2的那些元組(50個)存取的索引塊和SC中滿足條件的數(shù)據(jù)塊大約總共34塊若Student表在Sno上也有索引第二步也不必讀取所有的Student元組因為滿足條件的SC記錄僅50個,涉及最多50個

31、Student記錄讀取Student表的塊數(shù)也可大大減少 總的存取時間將進一步減少到數(shù)秒 36把代數(shù)表達式Q1變換為Q2、 Q3,即有選擇和連接操作時,先做選擇操作,這樣參加連接的元組就可以大大減少,這是代數(shù)優(yōu)化在Q3中SC表的選擇操作算法有全表掃描和索引掃描2種方法,經(jīng)過初步估算,索引掃描方法較優(yōu) 對于Student和SC表的連接,利用Student表上的索引,采用index join代價也較小,這就是物理優(yōu)化 37關(guān)系代數(shù)表達式等價變換規(guī)則 查詢樹的啟發(fā)式優(yōu)化 代 數(shù) 優(yōu) 化38代數(shù)優(yōu)化策略:通過對關(guān)系代數(shù)表達式的等價變換來提高查詢效率 關(guān)系代數(shù)表達式的等價:指用相同的關(guān)系代替兩個表達式中

32、相應的關(guān)系所得到的結(jié)果是相同的兩個關(guān)系表達式E1和E2是等價的,可記為E1E2 關(guān)系代數(shù)表達式等價變換規(guī)則 39關(guān)系代數(shù)表達式等價變換規(guī)則(續(xù))常用的等價變換規(guī)則:1. 連接、笛卡爾積交換律 設E1和E2是關(guān)系代數(shù)表達式,F(xiàn)是連接運算的條件,則有 E1 E2E2 E1 E1 E2E2 E1 E1 E2E2 E12. 連接、笛卡爾積的結(jié)合律 設E1,E2,E3是關(guān)系代數(shù)表達式,F(xiàn)1和F2是連接運算的條件,則有 (E1 E2) E3E1 (E2 E3) (E1 E2) E3E1 (E2 E3) (E1 E2) E3E1 (E2 E3) 3. 投影的串接定律 ( (E ) (E)這里,E是關(guān)系代數(shù)表

33、達式,Ai(i=1,2,n),Bj(j=1,2,m)是屬性名且A1,A2,An構(gòu)成B1,B2,Bm的子集。4. 選擇的串接定律 ( (E) (E)這里,E是關(guān)系代數(shù)表達式,F(xiàn)1、F2是選擇條件。 選擇的串接律說明選擇條件可以合并。這樣一次就可檢查全部條件。關(guān)系代數(shù)表達式等價變換規(guī)則(續(xù))415. 選擇與投影操作的交換律 F( (E ) (F(E)選擇條件F只涉及屬性A1,An。若F中有不屬于A1,An的屬性B1,Bm則有更一般的規(guī)則: (F(E) (F( (E)關(guān)系代數(shù)表達式等價變換規(guī)則(續(xù))426. 選擇與笛卡爾積的交換律如果F中涉及的屬性都是E1中的屬性,則 (E1E2) (E1)E2如果

34、F=F1F2,并且F1只涉及E1中的屬性,F(xiàn)2只涉及E2中的屬性,則由上面的等價變換規(guī)則1,4,6可推出: (E1E2) (E1) (E2)若F1只涉及E1中的屬性,F(xiàn)2涉及E1和E2兩者的屬性,則仍有 (E1E2) ( (E1)E2)它使部分選擇在笛卡爾積前先做。 關(guān)系代數(shù)表達式等價變換規(guī)則(續(xù))437. 選擇與并的分配律設E=E1E2,E1,E2有相同的屬性名,則 F(E1E2)F(E1)F(E2)8. 選擇與差運算的分配律若E1與E2有相同的屬性名,則 F(E1-E2)F(E1)-F(E2)9. 選擇對自然連接的分配律 F(E1 E2)F(E1) F(E2) F只涉及E1與E2的公共屬性

35、 關(guān)系代數(shù)表達式等價變換規(guī)則(續(xù))4410. 投影與笛卡爾積的分配律設E1和E2是兩個關(guān)系表達式,A1,An是E1的屬性,B1,Bm是E2的屬性,則 (E1E2) (E1) (E2)11. 投影與并的分配律設E1和E2有相同的屬性名,則 (E1E2) (E1) (E2)關(guān)系代數(shù)表達式等價變換規(guī)則(續(xù))45典型的啟發(fā)式規(guī)則:1. 選擇運算應盡可能先做。在優(yōu)化策略中這是最重要、最基本的一條2. 把投影運算和選擇運算同時進行如有若干投影和選擇運算,并且它們都對同一個關(guān)系操作,則可以在掃描此關(guān)系的同時完成所有的這些運算以避免重復掃描關(guān)系查詢樹的啟發(fā)式優(yōu)化 463. 把投影同其前或其后的雙目運算結(jié)合起來

36、4. 把某些選擇同在它前面要執(zhí)行的笛卡爾積結(jié)合起來成為一個連接運算 例:Student.Sno=SC.Sno (StudentSC) Student SC5. 找出公共子表達式如果這種重復出現(xiàn)的子表達式的結(jié)果不是很大的關(guān)系并且從外存中讀入這個關(guān)系比計算該子表達式的時間少得多,則先計算一次公共子表達式并把結(jié)果寫入中間文件是合算的當查詢的是視圖時,定義視圖的表達式就是公共子表達式的情況查詢樹的啟發(fā)式優(yōu)化(續(xù))47遵循這些啟發(fā)式規(guī)則,應用9.3.1的等價變換公式來優(yōu)化關(guān)系表達式的算法。算法:關(guān)系表達式的優(yōu)化輸入:一個關(guān)系表達式的查詢樹輸出:優(yōu)化的查詢樹方法:(1) 利用等價變換規(guī)則4把形如F1F2F

37、n(E)變換為F1(F2(Fn(E)。(2) 對每一個選擇,利用等價變換規(guī)則49盡可能把它移到樹的葉端。查詢樹的啟發(fā)式優(yōu)化(續(xù))48(3) 對每一個投影利用等價變換規(guī)則3,5,10,11中的一般形式盡可能把它移向樹的葉端。注意: 等價變換規(guī)則3使一些投影消失規(guī)則5把一個投影分裂為兩個,其中一個有可能被移向樹的葉端 (4) 利用等價變換規(guī)則35把選擇和投影的串接合并成單個選擇、單個投影或一個選擇后跟一個投影。使多個選擇或投影能同時執(zhí)行,或在一次掃描中全部完成 查詢樹的啟發(fā)式優(yōu)化(續(xù))49 (5) 把上述得到的語法樹的內(nèi)節(jié)點分組。每一雙目運算(, ,-)和它所有的直接祖先為一組(這些直接祖先是(,

38、運算)。如果其后代直到葉子全是單目運算,則也將它們并入該組但當雙目運算是笛卡爾積(),而且后面不是與它組成等值連接的選擇時,則不能把選擇與這個雙目運算組成同一組,把這些單目運算單獨分為一組 查詢樹的啟發(fā)式優(yōu)化(續(xù))50例4 下面給出例3中 SQL語句的代數(shù)優(yōu)化示例。 (1) 把SQL語句轉(zhuǎn)換成查詢樹,如下圖所示查詢樹的啟發(fā)式優(yōu)化(續(xù))查詢樹51為了使用關(guān)系代數(shù)表達式的優(yōu)化法,假設內(nèi)部表示是關(guān)系代數(shù)語法樹,則上面的查詢樹如下圖所示。查詢樹的啟發(fā)式優(yōu)化(續(xù)) 關(guān)系代數(shù)語法樹 52(2) 對查詢樹進行優(yōu)化利用規(guī)則4、6把選擇SC.Cno=2移到葉端,查詢樹便轉(zhuǎn)換成下圖所示的優(yōu)化的查詢樹。這就是9.2

39、.2節(jié)中Q3的查詢樹表示查詢樹的啟發(fā)式優(yōu)化(續(xù))優(yōu)化后的查詢樹 53Transformation Example: Pushing SelectionsQuery: Find the names of all instructors in the Music department, along with the titles of the courses that they teachname, title(dept_name= “Music”(instructor (teaches course_id, title (course)Transformation using rule 7a.n

40、ame, title(dept_name= “Music”(instructor) (teaches course_id, title (course)Performing the selection as early as possible reduces the size of the relation to be joined. Example with Multiple TransformationsQuery: Find the names of all instructors in the Music department who have taught a course in 2

41、009, along with the titles of the courses that they taughtname, title(dept_name= “Music”year = 2009 (instructor (teaches course_id, title (course)Transformation using join associatively (Rule 6a):name, title(dept_name= “Music”year = 2009 (instructor teaches) course_id, title (course)Second form prov

42、ides an opportunity to apply the “perform selections early” rule, resulting in the subexpression dept_name = “Music” (instructor) year = 2009 (teaches)Transformation Example: Pushing ProjectionsConsider: name, title(dept_name= “Music” (instructor) teaches) course_id, title (course)When we compute(de

43、pt_name = “Music” (instructor teaches)we obtain a relation whose schema is:(ID, name, dept_name, salary, course_id, sec_id, semester, year)Push projections using equivalence rules 8a and 8b; eliminate unneeded attributes from intermediate results to get: name, title(name, course_id ( dept_name= “Mus

44、ic” (instructor) teaches) course_id, title (course)Performing the projection as early as possible reduces the size of the relation to be joined. Multiple Transformations (Cont.)Join Ordering ExampleFor all relations r1, r2, and r3,(r1 r2) r3 = r1 (r2 r3 )(Join Associativity)If r2 r3 is quite large a

45、nd r1 r2 is small, we choose (r1 r2) r3 so that we compute and store a smaller temporary relation.Join Ordering Example (Cont.)Consider the expressionname, title(dept_name= “Music” (instructor) teaches) course_id, title (course)Could compute teaches course_id, title (course) first, and join result w

46、ith dept_name= “Music” (instructor) but the result of the first join is likely to be a large relation.Only a small fraction of the universitys instructors are likely to be from the Music department it is better to compute dept_name= “Music” (instructor) teaches first. 代數(shù)優(yōu)化改變查詢語句中操作的次序和組合,不涉及底層的存取路徑對

47、于一個查詢語句有許多存取方案,它們的執(zhí)行效率不同, 僅僅進行代數(shù)優(yōu)化是不夠的 物理優(yōu)化就是要選擇高效合理的操作算法或存取路徑,求得優(yōu)化的查詢計劃 物理優(yōu)化60選擇的方法: 基于規(guī)則的啟發(fā)式優(yōu)化基于代價估算的優(yōu)化兩者結(jié)合的優(yōu)化方法物理優(yōu)化(續(xù))61一、 選擇操作的啟發(fā)式規(guī)則 二、 連接操作的啟發(fā)式規(guī)則 基于啟發(fā)式規(guī)則的存取路徑選擇優(yōu)化62一、 選擇操作的啟發(fā)式規(guī)則:1. 對于小關(guān)系,使用全表順序掃描,即使選擇列上有索引 對于大關(guān)系,啟發(fā)式規(guī)則有:2. 對于選擇條件是主碼值的查詢查詢結(jié)果最多是一個元組,可以選擇主碼索引一般的RDBMS會自動建立主碼索引?;趩l(fā)式規(guī)則的存取路徑選擇優(yōu)化(續(xù))633

48、. 對于選擇條件是非主屬性值的查詢,并且選擇列上有索引要估算查詢結(jié)果的元組數(shù)目如果比例較小(10%)可以使用索引掃描方法否則還是使用全表順序掃描基于啟發(fā)式規(guī)則的存取路徑選擇優(yōu)化(續(xù))644. 對于選擇條件是屬性上的非等值查詢或者范圍查詢,并且選擇列上有索引要估算查詢結(jié)果的元組數(shù)目如果比例較小(10%)可以使用索引掃描方法否則還是使用全表順序掃描 基于啟發(fā)式規(guī)則的存取路徑選擇優(yōu)化(續(xù))655. 對于用AND連接的合取選擇條件如果有涉及這些屬性的組合索引優(yōu)先采用組合索引掃描方法如果某些屬性上有一般的索引則可以用例1-C4中介紹的索引掃描方法否則使用全表順序掃描。6. 對于用OR連接的析取選擇條件,

49、一般使用全表順序掃描基于啟發(fā)式規(guī)則的存取路徑選擇優(yōu)化(續(xù))66二、 連接操作的啟發(fā)式規(guī)則:1. 如果2個表都已經(jīng)按照連接屬性排序 選用排序-合并方法2. 如果一個表在連接屬性上有索引 選用索引連接方法3. 如果上面2個規(guī)則都不適用,其中一個表較小 選用Hash join方法基于啟發(fā)式規(guī)則的存取路徑選擇優(yōu)化(續(xù))674. 可以選用嵌套循環(huán)方法,并選擇其中較小的表,確切地講是占用的塊數(shù)(b)較少的表,作為外表(外循環(huán)的表) 。 理由:設連接表R與S分別占用的塊數(shù)為Br與Bs連接操作使用的內(nèi)存緩沖區(qū)塊數(shù)為K分配K-1塊給外表如果R為外表,則嵌套循環(huán)法存取的塊數(shù)為Br+( Br/K-1)Bs顯然應該選塊數(shù)小的表作為外表 基于啟發(fā)式規(guī)則的存取路徑選擇優(yōu)化(續(xù))68啟發(fā)式規(guī)則優(yōu)化是定性的選擇,適合解釋執(zhí)行的系統(tǒng)解釋執(zhí)行的系統(tǒng),優(yōu)化開銷包含在查詢總開銷之中 編譯執(zhí)行的系統(tǒng)中查詢優(yōu)化和查詢執(zhí)行是分開的可以采用精細復雜一些的基于代價的優(yōu)化方法 基于代價的優(yōu)化 69高

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論