資源描述:
《《查詢處理和優(yōu)化》ppt課件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第5章查詢處理和優(yōu)化5.1引言5.2代數(shù)優(yōu)化5.3依賴于存取路徑的規(guī)則優(yōu)化5.4代價估算優(yōu)化*5.1引言概述查詢是數(shù)據(jù)庫系統(tǒng)中最基本、最常見和最復(fù)雜的操作。對數(shù)據(jù)庫的查詢一般都是以查詢語言(如SQL)表示。從查詢請求出發(fā),直到得到查詢結(jié)果,這一過程稱為查詢處理。關(guān)系數(shù)據(jù)庫系統(tǒng)的查詢語言一般是“非過程語言”,它減輕了用戶選擇存取路徑的負(fù)擔(dān)。用戶只要提出‘干什么’,不必指出‘怎么干’。即用戶不必關(guān)心查詢的具體執(zhí)行過程,而由DBMS確定合理的、有效的執(zhí)行策略。DBMS在這方面的作用稱為查詢優(yōu)化。對于使用非過程
2、查詢語言的RDBMS,查詢優(yōu)化是查詢處理中非常重要的一環(huán),對系統(tǒng)性能會產(chǎn)生很大的影響。5.1引言2.查詢處理的一般過程先做詞法和語法分析,把查詢語句變成語法樹或語法圖;然后進(jìn)行查詢優(yōu)化,形成執(zhí)行計劃,生成可執(zhí)行代碼,交系統(tǒng)執(zhí)行。具體處理過程也可分為解釋和編譯兩種實(shí)現(xiàn)方式。解釋方式如圖6-1所示。編譯方式如圖6-2所示。對于常用的例行事務(wù),編譯方式可以顯著地提高數(shù)據(jù)庫性能。對于那些不怎么重復(fù)使用的偶然查詢,解釋也不失為一種簡單、實(shí)用的實(shí)現(xiàn)方式。這兩種實(shí)現(xiàn)方式在現(xiàn)有的商用DBMS中都有應(yīng)用。5.1引言3.例
3、子首先看一個簡單的例子,說明為什么要進(jìn)行查詢優(yōu)化。例:求選修了2號課程的學(xué)生姓名。用SQL語言表達(dá):SELECTSnameFROMS,SCWHERES.SNO=SC.SNOANDSC.CNO='2';假定學(xué)生-課程數(shù)據(jù)庫中有l(wèi)000個學(xué)生記錄,l0000個選課記錄,其中選修2號課程的選課記錄為50個。系統(tǒng)可以用多種等價的關(guān)系代數(shù)表達(dá)式來完成這一查詢1.Q1=πSname(σS.sno=sc.sno∧sc.cno='2'(S×SC))2.Q2=πSname(σsc.cno='2'(S
4、><
5、SC))
6、3.Q3=πSname(S
7、><
8、σsc.cno='2'(SC))我們將看到由于查詢執(zhí)行的策略不同,查詢時間相差很大。5.1引言查詢執(zhí)行策略Q1代價分析計算廣義笛卡爾積的代價把S和SC的每個元組連接起來。一般連接的做法是:在內(nèi)存中盡可能多地裝人某個表(如Student表)的若干塊元組,留出一塊存放另一個表(如SC表)的元組。然后把SC中的每個元組和S中每個元組連接,連接后的元組裝滿一塊后就寫到中間文件上,再從SC中讀入一塊和內(nèi)存中的S元組連接,直到SC表處理完。這時再一次讀入若干塊S元組,讀入一塊SC元
9、組,重復(fù)上述處理過程,直到把S表處理完。設(shè)一個塊能裝l0個Student元組或l00個SC元組,在內(nèi)存中存放5塊Student元組和l塊SC元組,則讀取總塊數(shù)為:1000/10+1000/(10×5)×(10000/100)=2100塊其中讀Student表l00塊。讀SC表20遍,每遍l00塊。若每秒讀寫20塊,則總計要花105(秒)。連接后的元組數(shù)為1000×10000。設(shè)每塊能裝l0個元組,則寫出這些塊要花1000000/20=50000(秒)。5.1引言查詢執(zhí)行策略Q1代價分析(續(xù))選擇操作的代
10、價依次讀入連接后的元組,按照選擇條件選取滿足要求的的記錄。假定內(nèi)存處理時間忽略。這一步讀取中間文件花費(fèi)的時間(同寫中間文件一樣)需50000秒。滿足條件的元組假設(shè)僅50個,均可放在內(nèi)存。3)投影操作的代價把第2步的結(jié)果在Sname上作投影輸出,得到最終結(jié)果。因此第一種情況下執(zhí)行查詢的總時間約為105+2×5×10000秒。這里,所有內(nèi)存處理時間均忽略不計。5.1引言查詢執(zhí)行策略Q2代價分析計算自然連接的代價為了執(zhí)行自然連接,讀取Student和SC表的策略不變,總的讀取塊數(shù)仍為2100塊,花費(fèi)l05秒。
11、但自然連接的結(jié)果比第一種情況大大減少,為10000個。因此寫出這些元組時間為10000/10/20=50秒。僅為第一種情況的千分之一。讀取中間文件塊,執(zhí)行選擇運(yùn)算,花費(fèi)時間也為50秒。將第2步結(jié)果投影輸出。因此,第二種情況總的執(zhí)行時間≈105+50+50=205秒。5.1引言查詢執(zhí)行策略Q3代價分析先對SC表作選擇運(yùn)算,只需讀一遍SC表,存取l00塊花費(fèi)時間為5秒,因?yàn)闈M足條件的元組僅50個,不必使用中間文件。讀取STUDENT表,把讀入的STUDENT元組和內(nèi)存中的SC元組作連接。也只需讀一遍STUD
12、ENT表共l00塊花費(fèi)時間為5秒。把連接結(jié)果投影輸出。第三種情況總的執(zhí)行時間≈5+5=10秒。5.1引言假如SC表的Cno字段上有索引,第l步就不必讀取所有的SC元組而只需讀取CNO=‘2’的那些元組(50個)。存取的索引塊和SC中滿足條件的數(shù)據(jù)塊大約總共3~4塊。若STUDENT表在Sno上也有索引,則第2步也不必讀取所有的STUDENT元組,因?yàn)闈M足條件的SC記錄僅50個,涉及最多50個STUDENT記錄,因此讀取STUDENT表的塊數(shù)