資源描述:
《關(guān)系查詢處理和查詢優(yōu)化》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第九章關(guān)系查詢處理和查詢優(yōu)化授課教師:王哲復(fù)習(xí)上節(jié)課內(nèi)容索引的創(chuàng)建及管理建立索引的必要性索引的類型管理索引(創(chuàng)建、查看、修改、刪除)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢處理查詢分析查詢檢查查詢優(yōu)化查詢執(zhí)行本次課學(xué)習(xí)內(nèi)容關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化代數(shù)優(yōu)化物理優(yōu)化一、關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化查詢優(yōu)化在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中有著非常重要的地位關(guān)系查詢優(yōu)化是影響RDBMS性能的關(guān)鍵因素由于關(guān)系表達(dá)式的語(yǔ)義級(jí)別很高,使關(guān)系系統(tǒng)可以從關(guān)系表達(dá)式中分析查詢語(yǔ)義,提供了執(zhí)行查詢優(yōu)化的可能性查詢優(yōu)化的優(yōu)點(diǎn)不僅在于用戶不必考慮如何最好地表達(dá)查詢以獲得較好的效率,而且在于系統(tǒng)可以比用戶程
2、序的“優(yōu)化”做得更好;(1)優(yōu)化器可以從數(shù)據(jù)字典中獲取許多統(tǒng)計(jì)信息,而用戶程序則難以獲得這些信息;(2)如果數(shù)據(jù)庫(kù)的物理統(tǒng)計(jì)信息改變了,系統(tǒng)可以自動(dòng)對(duì)查詢重新優(yōu)化以選擇相適應(yīng)的執(zhí)行計(jì)劃。在非關(guān)系系統(tǒng)中必須重寫程序,而重寫程序在實(shí)際應(yīng)用中往往是不太可能的。(3)優(yōu)化器可以考慮數(shù)百種不同的執(zhí)行計(jì)劃,程序員一般只能考慮有限的幾種可能性。(4)優(yōu)化器中包括了很多復(fù)雜的優(yōu)化技術(shù),這些優(yōu)化技術(shù)往往只有最好的程序員才能掌握。系統(tǒng)的自動(dòng)優(yōu)化相當(dāng)于使得所有人都擁有這些優(yōu)化技術(shù)。RDBMS通過(guò)某種代價(jià)模型計(jì)算出各種查詢執(zhí)行策略的執(zhí)行代價(jià),然后選取代價(jià)最小的執(zhí)行方
3、案:集中式數(shù)據(jù)庫(kù)執(zhí)行開銷主要包括:磁盤存取塊數(shù)(I/O代價(jià))處理機(jī)時(shí)間(CPU代價(jià))查詢的內(nèi)存開銷I/O代價(jià)是最主要的分布式數(shù)據(jù)庫(kù)總代價(jià)=I/O代價(jià)+CPU代價(jià)+內(nèi)存代價(jià)+通信代價(jià)查詢優(yōu)化的總目標(biāo):選擇有效的策略;求得給定關(guān)系表達(dá)式的值;使得查詢代價(jià)最小(實(shí)際上是較小);實(shí)例演示(驗(yàn)證為何需要查詢優(yōu)化?)例1:求選修了2號(hào)課程的學(xué)生姓名。假定學(xué)生-課程數(shù)據(jù)庫(kù)中有1000條學(xué)生記錄,10000條選課記錄;其中選修2號(hào)課程的選課記錄為50條;用SQL表達(dá):SELECTStudent.SnameFROMStudent,SCWHEREStudent.
4、Sno=SC.SnoANDSC.Cno=‘2’系統(tǒng)可以用多種等價(jià)的關(guān)系代數(shù)表達(dá)式來(lái)完成:Q1=πSname(σStudent.Sno=SC.Sno∧Sc.Cno='2'(Student×SC))Q2=πSname(σSc.Cno='2'(StudentSC))Q3=πSname(StudentσSc.Cno='2'(SC))1、第一種情況分三個(gè)步驟:計(jì)算Student×SC花費(fèi)時(shí)間,即計(jì)算笛卡爾積操作時(shí)間;計(jì)算σStudent.Sno=SC.Sno∧Sc.Cno=‘2’花費(fèi)時(shí)間,即計(jì)算選擇操作時(shí)間;計(jì)算πSname花費(fèi)時(shí)間,即計(jì)算投影操作時(shí)間
5、;1)計(jì)算笛卡爾積時(shí)間把Student和SC的每個(gè)元組連接起來(lái)的做法:在內(nèi)存中盡可能多地裝入某個(gè)表(如Student表)的若干塊,留出一塊存放另一個(gè)表(如SC表)的元組;把SC中的每個(gè)元組和Student中每個(gè)元組連接,連接后的元組裝滿一塊后就寫到中間文件上;從SC中讀入一塊和內(nèi)存中的Student元組連接,直到SC表處理完;再讀入若干塊Student元組,讀入一塊SC元組;重復(fù)上述處理過(guò)程,直到把Student表處理完;設(shè)一個(gè)塊能裝10個(gè)Student元組或100個(gè)SC元組,在內(nèi)存中存放5塊Student元組和1塊SC元組,則讀取總塊數(shù)為:
6、+=100+20×100=2100塊若每秒讀寫20塊,則總計(jì)要花105s;連接后的元組數(shù)為103×104=107;設(shè)每塊能裝10個(gè)元組,則寫出這些塊要用106/20=5×104s;2)計(jì)算選擇時(shí)間依次讀入連接后的元組,按照選擇條件選取滿足要求的記錄;假定內(nèi)存處理時(shí)間忽略;讀取中間文件花費(fèi)的時(shí)間(同寫中間文件一樣)需5×104s;滿足條件的元組假設(shè)僅50個(gè),均可放在內(nèi)存;3)作投影操作把第2步的結(jié)果在Sname上作投影輸出,得到最終結(jié)果;所有內(nèi)存處理時(shí)間均忽略不計(jì);第一種情況下執(zhí)行查詢的總時(shí)間≈105+2×5×104≈105s2、第二種情況分三
7、個(gè)步驟:計(jì)算StudentSC花費(fèi)時(shí)間,即計(jì)算自然連接操作時(shí)間;計(jì)算σSc.Cno=‘2’花費(fèi)時(shí)間,即計(jì)算選擇操作時(shí)間;計(jì)算πSname花費(fèi)時(shí)間,即計(jì)算投影操作時(shí)間;1)計(jì)算自然連接時(shí)間讀取Student和SC表的策略不變,總的讀取塊數(shù)仍為2100塊,花費(fèi)105s;自然連接的結(jié)果比第一種情況大大減少,為104個(gè);寫出這些元組時(shí)間為103/20=50s,為第一種情況的千分之一;2)計(jì)算選擇操作時(shí)間讀取中間文件塊,執(zhí)行選擇運(yùn)算,花費(fèi)時(shí)間也為50s;3)計(jì)算選擇操作時(shí)間:把第2步結(jié)果投影輸出。第二種情況下執(zhí)行查詢的總時(shí)間≈105+50+50≈205
8、s3、第三種情況分三個(gè)步驟:先對(duì)SC表作選擇運(yùn)算,只需讀一遍SC表,需存取100塊,花費(fèi)時(shí)間為5s,因?yàn)闈M足條件的元組僅50個(gè),不必使用中間文件。讀取Student