版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)系統(tǒng)概論AnIntroductiontoDatabaseSystem第九章關(guān)系查詢處理和查詢優(yōu)化
數(shù)據(jù)庫(kù)性能優(yōu)化的基本框架性能優(yōu)化的概念性能優(yōu)化的目標(biāo)性能優(yōu)化的內(nèi)容性能優(yōu)化的方法與策略性能優(yōu)化的步驟1性能優(yōu)化的概念性能優(yōu)化(performanceoptimization)就是通過優(yōu)化應(yīng)用程序、修改系統(tǒng)參數(shù)、調(diào)整系統(tǒng)配置來改善和優(yōu)化系統(tǒng)性能。動(dòng)態(tài)過程循環(huán)過程2性能優(yōu)化的目標(biāo)消除系統(tǒng)瓶頸提高系統(tǒng)吞吐量和響應(yīng)時(shí)間吞吐量是指每個(gè)單元時(shí)間完成的工作,以每秒鐘的事務(wù)量表示,該值越高越好;響應(yīng)時(shí)間是指結(jié)果集的第一行返回所需要的時(shí)間,是應(yīng)用做出反應(yīng)的時(shí)間,以毫秒或秒表示,該值越低越好。
可用性內(nèi)存的合理使用降低不必要的I/O開銷3性能優(yōu)化的內(nèi)容數(shù)據(jù)庫(kù)設(shè)計(jì)的優(yōu)化應(yīng)用程序的優(yōu)化DBMS優(yōu)化服務(wù)器優(yōu)化操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)環(huán)境的優(yōu)化4性能優(yōu)化的方法與策略方法:發(fā)現(xiàn)問題診斷問題解決問題4性能優(yōu)化的方法與策略策略:
(1)設(shè)計(jì)聯(lián)合數(shù)據(jù)庫(kù)服務(wù)器
將處理負(fù)荷分?jǐn)傇诙鄠€(gè)服務(wù)器間而達(dá)到高性能
(2)優(yōu)化數(shù)據(jù)庫(kù)設(shè)計(jì)
在數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)的早期階段正確設(shè)計(jì)數(shù)據(jù)庫(kù),使其為業(yè)務(wù)需求建模并利用硬件和軟件功能
(3)數(shù)據(jù)庫(kù)服務(wù)器的優(yōu)化
可以配置SQLServer內(nèi)存、I/O子系統(tǒng)等組件以優(yōu)化服務(wù)器性能
4性能優(yōu)化的方法與策略(4)應(yīng)用程序的優(yōu)化應(yīng)用程序優(yōu)化對(duì)服務(wù)器上的鎖類型和持續(xù)時(shí)間、I/O活動(dòng)量以及處理(CPU)負(fù)荷等產(chǎn)生主要影響,并由此影響總體性能的優(yōu)劣。應(yīng)用程序的設(shè)計(jì)準(zhǔn)則包括:消除過多的網(wǎng)絡(luò)流量;使用小結(jié)果集;使事務(wù)盡可能簡(jiǎn)短;使用存儲(chǔ)過程;確保將應(yīng)用程序設(shè)計(jì)為可避免死鎖等5性能優(yōu)化的步驟第九章
關(guān)系系統(tǒng)及其查詢優(yōu)化9.1關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢處理
9.2關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化
9.3代數(shù)優(yōu)化9.4物理優(yōu)化9.5小結(jié)
關(guān)系系統(tǒng)及其查詢優(yōu)化(續(xù))本章目的:
RDBMS的查詢處理步驟查詢優(yōu)化的概念基本方法和技術(shù)查詢優(yōu)化分類:代數(shù)優(yōu)化物理優(yōu)化9.1關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢處理9.1.1查詢處理步驟9.1.2實(shí)現(xiàn)查詢操作的算法示例9.1.1查詢處理步驟RDBMS查詢處理階段:
1.查詢分析2.查詢檢查3.查詢優(yōu)化4.查詢執(zhí)行
查詢處理步驟(續(xù))查詢處理步驟1.查詢分析對(duì)查詢語句進(jìn)行掃描、詞法分析和語法分析
從查詢語句中識(shí)別出語言符號(hào)
進(jìn)行語法檢查和語法分析
2.查詢檢查根據(jù)數(shù)據(jù)字典對(duì)合法的查詢語句進(jìn)行語義檢查
根據(jù)數(shù)據(jù)字典中的用戶權(quán)限和完整性約束定義對(duì)用戶的存取權(quán)限進(jìn)行檢查
檢查通過后把SQL查詢語句轉(zhuǎn)換成等價(jià)的關(guān)系代數(shù)表達(dá)式
RDBMS一般都用查詢樹(語法分析樹)來表示擴(kuò)展的關(guān)系代數(shù)表達(dá)式把數(shù)據(jù)庫(kù)對(duì)象的外部名稱轉(zhuǎn)換為內(nèi)部表示
3.查詢優(yōu)化查詢優(yōu)化:選擇一個(gè)高效執(zhí)行的查詢處理策略查詢優(yōu)化分類:代數(shù)優(yōu)化:指關(guān)系代數(shù)表達(dá)式的優(yōu)化物理優(yōu)化:指存取路徑和底層操作算法的選擇查詢優(yōu)化方法選擇的依據(jù):基于規(guī)則(rulebased)基于代價(jià)(costbased)基于語義(semanticbased)4.查詢執(zhí)行依據(jù)優(yōu)化器得到的執(zhí)行策略生成查詢計(jì)劃代碼生成器(codegenerator)生成執(zhí)行查詢計(jì)劃的代碼
9.1關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢處理9.1.1查詢處理步驟9.1.2實(shí)現(xiàn)查詢操作的算法示例
9.1.2實(shí)現(xiàn)查詢操作的算法示例
一、選擇操作的實(shí)現(xiàn)
二、連接操作的實(shí)現(xiàn)
一、選擇操作的實(shí)現(xiàn)
[例1]Select*fromstudentwhere<條件表達(dá)式>; 考慮<條件表達(dá)式>的幾種情況:
C1:無條件;
C2:Sno='200215121';
C3:Sage>20;
C4:Sdept='CS'ANDSage>20;
選擇操作的實(shí)現(xiàn)(續(xù))選擇操作典型實(shí)現(xiàn)方法:1.簡(jiǎn)單的全表掃描方法
對(duì)查詢的基本表順序掃描,逐一檢查每個(gè)元組是否滿足選擇條件,把滿足條件的元組作為結(jié)果輸出適合小表,不適合大表2.索引(或散列)掃描方法
適合選擇條件中的屬性上有索引(例如B+樹索引或Hash索引)通過索引先找到滿足條件的元組主碼或元組指針,再通過元組指針直接在查詢的基本表中找到元組選擇操作的實(shí)現(xiàn)(續(xù))[例1-C2]以C2為例,Sno=‘200215121’,并且Sno上有索引(或Sno是散列碼)使用索引(或散列)得到Sno為‘200215121’元組的指針通過元組指針在student表中檢索到該學(xué)生[例1-C3]以C3為例,Sage>20,并且Sage上有B+樹索引使用B+樹索引找到Sage=20的索引項(xiàng),以此為入口點(diǎn)在B+樹的順序集上得到Sage>20的所有元組指針通過這些元組指針到student表中檢索到所有年齡大于20的學(xué)生。
選擇操作的實(shí)現(xiàn)(續(xù))[例1-C4]以C4為例,Sdept=‘CS’ANDSage>20,如果Sdept和Sage上都有索引:算法一:分別用上面兩種方法分別找到Sdept=‘CS’的一組元組指針和Sage>20的另一組元組指針求這2組指針的交集到student表中檢索得到計(jì)算機(jī)系年齡大于20的學(xué)生算法二:找到Sdept=‘CS’的一組元組指針,通過這些元組指針到student表中檢索對(duì)得到的元組檢查另一些選擇條件(如Sage>20)是否滿足把滿足條件的元組作為結(jié)果輸出。
二、連接操作的實(shí)現(xiàn)
連接操作是查詢處理中最耗時(shí)的操作之一
本節(jié)只討論等值連接(或自然連接)最常用的實(shí)現(xiàn)算法
[例2]SELECT*FROMStudent,SC WHEREStudent.Sno=SC.Sno;
連接操作的實(shí)現(xiàn)(續(xù))1.嵌套循環(huán)方法(nestedloop)2.排序-合并方法(sort-mergejoin或mergejoin)3.索引連接(indexjoin)方法4.HashJoin方法連接操作的實(shí)現(xiàn)(續(xù))嵌套循環(huán)方法(nestedloop)對(duì)外層循環(huán)(Student)的每一個(gè)元組(s),檢索內(nèi)層循環(huán)(SC)中的每一個(gè)元組(sc)檢查這兩個(gè)元組在連接屬性(sno)上是否相等如果滿足連接條件,則串接后作為結(jié)果輸出,直到外層循環(huán)表中的元組處理完為止連接操作的實(shí)現(xiàn)(續(xù))2.排序-合并方法(sort-mergejoin或mergejoin)
適合連接的諸表已經(jīng)排好序的情況排序-合并連接方法的步驟:如果連接的表沒有排好序,先對(duì)Student表和SC表按連接屬性Sno排序取Student表中第一個(gè)Sno,依次掃描SC表中具有相同Sno的元組連接操作的實(shí)現(xiàn)(續(xù))200215121200215122200215123200215124...200215121192200215121285200215121388200215122290200215122380...排序-合并連接方法示意圖連接操作的實(shí)現(xiàn)(續(xù))排序-合并連接方法的步驟(續(xù)):當(dāng)掃描到Sno不相同的第一個(gè)SC元組時(shí),返回Student表掃描它的下一個(gè)元組,再掃描SC表中具有相同Sno的元組,把它們連接起來重復(fù)上述步驟直到Student表掃描完連接操作的實(shí)現(xiàn)(續(xù))Student表和SC表都只要掃描一遍如果2個(gè)表原來無序,執(zhí)行時(shí)間要加上對(duì)兩個(gè)表的排序時(shí)間對(duì)于2個(gè)大表,先排序后使用sort-mergejoin方法執(zhí)行連接,總的時(shí)間一般仍會(huì)大大減少
連接操作的實(shí)現(xiàn)(續(xù))3.索引連接(indexjoin)方法步驟:①在SC表上建立屬性Sno的索引,如果原來沒有該索引②對(duì)Student中每一個(gè)元組,由Sno值通過SC的索引查找相應(yīng)的SC元組③把這些SC元組和Student元組連接起來循環(huán)執(zhí)行②③,直到Student表中的元組處理完為止連接操作的實(shí)現(xiàn)(續(xù))4.HashJoin方法
把連接屬性作為hash碼,用同一個(gè)hash函數(shù)把R和S中的元組散列到同一個(gè)hash文件中步驟:劃分階段(partitioningphase):對(duì)包含較少元組的表(比如R)進(jìn)行一遍處理把它的元組按hash函數(shù)分散到hash表的桶中試探階段(probingphase):也稱為連接階段(joinphase)對(duì)另一個(gè)表(S)進(jìn)行一遍處理把S的元組散列到適當(dāng)?shù)膆ash桶中把元組與桶中所有來自R并與之相匹配的元組連接起來
連接操作的實(shí)現(xiàn)(續(xù))上面hashjoin算法前提:假設(shè)兩個(gè)表中較小的表在第一階段后可以完全放入內(nèi)存的hash桶中
以上的算法思想可以推廣到更加一般的多個(gè)表的連接算法上
第九章
關(guān)系系統(tǒng)及其查詢優(yōu)化9.1關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢處理9.2關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化
9.3代數(shù)優(yōu)化
9.4物理優(yōu)化
9.5小結(jié)
9.2關(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á)式的語義級(jí)別很高,使關(guān)系系統(tǒng)可以從關(guān)系表達(dá)式中分析查詢語義,提供了執(zhí)行查詢優(yōu)化的可能性
9.2關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化9.2.1查詢優(yōu)化概述9.2.2一個(gè)實(shí)例
9.2.1查詢優(yōu)化概述關(guān)系系統(tǒng)的查詢優(yōu)化非關(guān)系系統(tǒng)查詢優(yōu)化概述(續(xù))查詢優(yōu)化的優(yōu)點(diǎn)不僅在于用戶不必考慮如何最好地表達(dá)查詢以獲得較好的效率,而且在于系統(tǒng)可以比用戶程序的“優(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)用中往往是不太可能的。查詢優(yōu)化概述(續(xù))(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ù)查詢優(yōu)化概述(續(xù))RDBMS通過某種代價(jià)模型計(jì)算出各種查詢執(zhí)行策略的執(zhí)行代價(jià),然后選取代價(jià)最小的執(zhí)行方案集中式數(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)化概述(續(xù))查詢優(yōu)化的總目標(biāo):選擇有效的策略求得給定關(guān)系表達(dá)式的值使得查詢代價(jià)最小(實(shí)際上是較小)9.2關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化9.2.1查詢優(yōu)化概述9.2.2一個(gè)實(shí)例9.2.2一個(gè)實(shí)例[例3]求選修了2號(hào)課程的學(xué)生姓名。用SQL表達(dá):
SELECTStudent.Sname FROMStudent,SC WHEREStudent.Sno=SC.SnoAND SC.Cno=‘2’;假定學(xué)生-課程數(shù)據(jù)庫(kù)中有1000個(gè)學(xué)生記錄,10000個(gè)選課記錄其中選修2號(hào)課程的選課記錄為50個(gè)一個(gè)實(shí)例(續(xù))系統(tǒng)可以用多種等價(jià)的關(guān)系代數(shù)表達(dá)式來完成這一查詢Q1=πSname(σStudent.Sno=SC.Sno∧Sc.Cno='2'
(Student×SC))Q2=πSname(σSc.Cno='2'(StudentSC))Q3=πSname(Student
σSc.Cno='2'(SC))
一個(gè)實(shí)例(續(xù))一、第一種情況
Q1=πSname(σStudent.Sno=SC.Sno∧Sc.Cno='2'
Student×SC))1.計(jì)算廣義笛卡爾積把Student和SC的每個(gè)元組連接起來的做法:在內(nèi)存中盡可能多地裝入某個(gè)表(如Student表)的若干塊,留出一塊存放另一個(gè)表(如SC表)的元組。把SC中的每個(gè)元組和Student中每個(gè)元組連接,連接后的元組裝滿一塊后就寫到中間文件上從SC中讀入一塊和內(nèi)存中的Student元組連接,直到SC表處理完。再讀入若干塊Student元組,讀入一塊SC元組重復(fù)上述處理過程,直到把Student表處理完一個(gè)實(shí)例(續(xù))設(shè)一個(gè)塊能裝10個(gè)Student元組或100個(gè)SC元組,在內(nèi)存中存放5塊Student元組和1塊SC元組,則讀取總塊數(shù)為
+=100+20×100=2100塊其中,讀Student表100塊。讀SC表20遍,每遍100塊。若每秒讀寫20塊,則總計(jì)要花105s
連接后的元組數(shù)為103×104=107。設(shè)每塊能裝10個(gè)元組,則寫出這些塊要用106/20=5×104s
一個(gè)實(shí)例(續(xù))2.作選擇操作依次讀入連接后的元組,按照選擇條件選取滿足要求的記錄假定內(nèi)存處理時(shí)間忽略。讀取中間文件花費(fèi)的時(shí)間(同寫中間文件一樣)需5×104s滿足條件的元組假設(shè)僅50個(gè),均可放在內(nèi)存一個(gè)實(shí)例(續(xù))3.作投影操作把第2步的結(jié)果在Sname上作投影輸出,得到最終結(jié)果
第一種情況下執(zhí)行查詢的總時(shí)間≈105+2×5×104≈105s所有內(nèi)存處理時(shí)間均忽略不計(jì)
一個(gè)實(shí)例(續(xù))二、第二種情況
Q2=πSname(σSc.Cno='2'(StudentSC))1.計(jì)算自然連接執(zhí)行自然連接,讀取Student和SC表的策略不變,總的讀取塊數(shù)仍為2100塊花費(fèi)105s自然連接的結(jié)果比第一種情況大大減少,為104個(gè)寫出這些元組時(shí)間為104/10/20=50s,為第一種情況的千分之一2.讀取中間文件塊,執(zhí)行選擇運(yùn)算,花費(fèi)時(shí)間也為50s。3.把第2步結(jié)果投影輸出。第二種情況總的執(zhí)行時(shí)間≈105+50+50≈205s一個(gè)實(shí)例(續(xù))三、第三種情況
Q3=πSname(Student
σSc.Cno='2'(SC))1.先對(duì)SC表作選擇運(yùn)算,只需讀一遍SC表,存取100塊花費(fèi)時(shí)間為5s,因?yàn)闈M足條件的元組僅50個(gè),不必使用中間文件。2.讀取Student表,把讀入的Student元組和內(nèi)存中的SC元組作連接。也只需讀一遍Student表共100塊,花費(fèi)時(shí)間為5s。3.把連接結(jié)果投影輸出第三種情況總的執(zhí)行時(shí)間≈5+5≈10s一個(gè)實(shí)例(續(xù))假如SC表的Cno字段上有索引第一步就不必讀取所有的SC元組而只需讀取Cno=‘2’的那些元組(50個(gè))存取的索引塊和SC中滿足條件的數(shù)據(jù)塊大約總共3~4塊若Student表在Sno上也有索引第二步也不必讀取所有的Student元組因?yàn)闈M足條件的SC記錄僅50個(gè),涉及最多50個(gè)Student記錄讀取Student表的塊數(shù)也可大大減少
總的存取時(shí)間將進(jìn)一步減少到數(shù)秒一個(gè)實(shí)例(續(xù))把代數(shù)表達(dá)式Q1變換為Q2、Q3,即有選擇和連接操作時(shí),先做選擇操作,這樣參加連接的元組就可以大大減少,這是代數(shù)優(yōu)化在Q3中SC表的選擇操作算法有全表掃描和索引掃描2種方法,經(jīng)過初步估算,索引掃描方法較優(yōu)對(duì)于Student和SC表的連接,利用Student表上的索引,采用indexjoin代價(jià)也較小,這就是物理優(yōu)化數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)優(yōu)化常用方法1邏輯結(jié)構(gòu)的優(yōu)化2物理結(jié)構(gòu)的優(yōu)化3SQL語句優(yōu)化
1邏輯結(jié)構(gòu)的優(yōu)化在適當(dāng)?shù)牡胤讲捎梅匆?guī)范化設(shè)計(jì)在適當(dāng)?shù)牡胤椒指畋碓谶m當(dāng)?shù)牡胤桨驯磉M(jìn)行分組放入數(shù)據(jù)庫(kù)執(zhí)行完整性約束
適當(dāng)采取反規(guī)范化設(shè)計(jì)
(1)反規(guī)范的必要性規(guī)范化的程度應(yīng)根據(jù)實(shí)際需要來決定,因?yàn)椤胺蛛x越深”,產(chǎn)生的關(guān)系越多,結(jié)構(gòu)越復(fù)雜。關(guān)系越多,連接操作越頻繁,而連接操作是最費(fèi)時(shí)間的,在數(shù)據(jù)庫(kù)設(shè)計(jì)中特別對(duì)以查詢?yōu)橹鞯臄?shù)據(jù)庫(kù)設(shè)計(jì)來說,頻繁的連接會(huì)嚴(yán)重影響查詢速度。所以,在數(shù)據(jù)庫(kù)的設(shè)計(jì)過程中有時(shí)故意保留非規(guī)范化約束,或者規(guī)范化以后又反規(guī)范,這樣做通常是為了改進(jìn)數(shù)據(jù)庫(kù)的查詢性能,加快數(shù)據(jù)庫(kù)系統(tǒng)的響應(yīng)速度
適當(dāng)采取反規(guī)范化設(shè)計(jì)(續(xù))(2)反規(guī)范技術(shù)在進(jìn)行反規(guī)范設(shè)計(jì)之前,要充分考慮數(shù)據(jù)的存取需求、常用表的大小、特殊的計(jì)算、數(shù)據(jù)的物理存儲(chǔ)等。常用的反規(guī)范技術(shù)有合理增加冗余列、派生列或重新組表幾種。反規(guī)范化的好處是降低連接操作的需求,降低外碼和索引數(shù)目,減少表的個(gè)數(shù),從而提高查詢速度,這對(duì)于性能要求相對(duì)較高的數(shù)據(jù)庫(kù)系統(tǒng)來說,能有效地改善系統(tǒng)的性能。但相應(yīng)的問題是可能影響數(shù)據(jù)的完整性,加快查詢速度的同時(shí)降低修改速度。適當(dāng)采取反規(guī)范化設(shè)計(jì)(續(xù))(2)物理反規(guī)范化對(duì)于頻繁訪問但是不頻繁修改的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理不規(guī)范化。對(duì)于頻繁修改但并不頻繁訪問的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理規(guī)范化。
分割表或存貯冗余數(shù)據(jù)。分割表分為水平分割表和垂直分割表兩種。水平分割表的使用場(chǎng)合:(1)當(dāng)多個(gè)過程頻繁訪問數(shù)據(jù)表的不同行時(shí),可將表水平分割成幾個(gè)表。(2)當(dāng)主要過程要頻繁訪問部分行時(shí),可把頻繁被訪問的行數(shù)據(jù)同較少被訪問的行數(shù)據(jù)分開。垂直分割表的使用場(chǎng)合:(1)當(dāng)多個(gè)過程頻繁訪問數(shù)據(jù)表的不同列時(shí),可將表垂直分割成幾個(gè)表。(2)當(dāng)主要過程要頻繁訪問部分列時(shí),可把頻繁被訪問的列數(shù)據(jù)同較少被訪問的列數(shù)據(jù)分開。
數(shù)據(jù)冗余主要是通過增加冗余列、派生列和合并表,減少頻繁連接表和重復(fù)計(jì)算。2物理結(jié)構(gòu)的優(yōu)化物理存儲(chǔ)結(jié)構(gòu)優(yōu)化就是合理分配邏輯結(jié)構(gòu)的物理存儲(chǔ)地址,減少磁盤I/O讀寫次數(shù)。其原則是:為表和索引分別創(chuàng)建不同的表空間,并將表空間置于不同的磁盤上;將頻繁訪問的表、索引以及他們的表空間分開放于單獨(dú)的磁盤上;確定最常被同時(shí)訪問的表空間,利用分布在不同的磁盤上的物理文件組建此表空間;盡量在多個(gè)磁盤控制器之間分離物理磁盤,以獲得更好的I/O容量;將SQLServer的可執(zhí)行文件和數(shù)據(jù)庫(kù)文件分別放在單獨(dú)的磁盤上。物理結(jié)構(gòu)的優(yōu)化方法合理使用索引優(yōu)化tempdb性能重新規(guī)劃文件和文件組的設(shè)置優(yōu)化事務(wù)日志性能合理使用索引創(chuàng)建索引是提高檢索效率最有效的方法之一,一個(gè)建有合理索引的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)可能比一個(gè)沒有建立索引的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)效率高幾十倍,但并不是索引越多越好。索引的建立雖然加快了查詢,但也降低了數(shù)據(jù)更新速度,因?yàn)樾聰?shù)據(jù)不僅要增加到表中,也要增加到索引中。另外,索引還需要額外的磁盤空間和維護(hù)開銷。因此,要合理使用索引。建立索引的原則(1)應(yīng)對(duì)經(jīng)常出現(xiàn)在檢索條件中的數(shù)據(jù)域建立索引,如果某些數(shù)據(jù)域經(jīng)常一起出現(xiàn)在檢索條件中,那么建立復(fù)合索引。(2)應(yīng)對(duì)經(jīng)常用于表連接操作中的數(shù)據(jù)域建立索引,如果是多域連接則建立復(fù)合索引。(3)對(duì)于復(fù)合索引,索引中的數(shù)據(jù)域順序要和實(shí)際應(yīng)用的檢索和連接順序保持一致。(4)如果待排序的列有多個(gè),且每列都含有重復(fù)值可考慮由多個(gè)字段建立組合索引,盡量使關(guān)鍵查詢形成索引覆蓋,其前導(dǎo)列一定是使用最頻繁的列。(5)不要在索引中包含經(jīng)常修改、增加和刪除的列。(6)當(dāng)數(shù)據(jù)庫(kù)表更新大量數(shù)據(jù)后,刪除并重建索引可以提高查詢速度。除了合理使用索引之外,正確合理使用簇、建立散列表索引等邏輯結(jié)構(gòu)也可以加快系統(tǒng)的檢索效率。
優(yōu)化tempdb性能對(duì)tempdb數(shù)據(jù)庫(kù)的物理位置和數(shù)據(jù)庫(kù)選項(xiàng)設(shè)置的調(diào)整包括:(l)使用SQLServer企業(yè)管理器將tempdb數(shù)據(jù)庫(kù)設(shè)為允許自動(dòng)根據(jù)需求進(jìn)行擴(kuò)展。這樣,對(duì)于那些生成的中間結(jié)果集超出tempdb數(shù)據(jù)庫(kù)預(yù)期的查詢操作來說,這樣能夠保證在執(zhí)行完成前查詢過程不會(huì)中斷。(2)將tempdb數(shù)據(jù)庫(kù)文件的初始大小設(shè)定為合理值,使其避免頻繁的當(dāng)需要更多空間時(shí)文件自動(dòng)擴(kuò)展。如果tempdb數(shù)據(jù)庫(kù)擴(kuò)展得過于頻繁,性能將會(huì)受不良影響。(3)將文件增長(zhǎng)增量調(diào)整到合適值,以避免tempdb數(shù)據(jù)庫(kù)文件按太小的值增長(zhǎng),因?yàn)槿绻募鲩L(zhǎng)幅度與寫入tempdb數(shù)據(jù)庫(kù)的數(shù)據(jù)量相比太小,則tempdb數(shù)據(jù)庫(kù)可能需要始終擴(kuò)展,這將妨害性能。(4)建議將tempdb數(shù)據(jù)庫(kù)放在快速I/O子系統(tǒng)上以確保好的性能。在多個(gè)磁盤上優(yōu)化tempdb數(shù)據(jù)庫(kù)以獲得更好的性能。使用文件組將tempdb數(shù)據(jù)庫(kù)放在除用戶數(shù)據(jù)庫(kù)所使用的磁盤之外的磁盤上。
文件和文件組的高效使用主文件組是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)由SQLServer自動(dòng)創(chuàng)建的。如果不創(chuàng)建其他的文件組,在缺省情況下,所有的文件都進(jìn)入主文件組。為了明確地將數(shù)據(jù)庫(kù)的表和索引放在特定的磁盤驅(qū)動(dòng)器上,必須創(chuàng)建用戶定義文件組。文件組提供了邏輯的將文件組合起來的方法,同時(shí)將單個(gè)文件與主文件組分離。
建議:為避免數(shù)據(jù)庫(kù)數(shù)據(jù)與SQLServer系統(tǒng)文件和master、model、msdb、tempdb以及應(yīng)用數(shù)據(jù)庫(kù)位于相同的磁盤上,創(chuàng)建一個(gè)用戶定義文件組。3優(yōu)化SQL語句避免使用SELECT*語句避免使用DISTINCT調(diào)整查詢條件語句的順序避免使用OR關(guān)鍵字正確使用IN、EXISTS少用負(fù)邏輯UNION和UNIONALL的正確使用使用表的別名正確使用ORDERBY避免使用HAVING子句正確使用事件探查器在企業(yè)管理器中,菜單“工具”——“SQL事件探查器”創(chuàng)建新跟蹤跟蹤屬性的“事件”選項(xiàng)卡中,確保選中TSQL的“SQL:BatchCompleted”跟蹤屬性的“數(shù)據(jù)列”選項(xiàng)卡中,在默認(rèn)列中增加“EndTime”列,并移動(dòng)到“StartTime”之后點(diǎn)擊“運(yùn)行”避免使用SELECT*語句在使用“*”來查詢數(shù)據(jù)表中所有列的時(shí)候,數(shù)據(jù)庫(kù)在解析時(shí)會(huì)通過查詢數(shù)據(jù)字典將“*”依次轉(zhuǎn)換為數(shù)據(jù)表中每一列的列名,這就需要耗費(fèi)額外的時(shí)間,影響查詢效率。因此,在使用SELECT語句查詢時(shí),應(yīng)該在SELECT之后將需要查詢的列一一列出,即使是要查詢數(shù)據(jù)表中所有列的信息,也最好不要使用“*”。從可讀性方面考慮,在SELECT之后將需要查詢的列一一列出,也方便用戶對(duì)所要查詢數(shù)據(jù)的理解。避免使用select*語句——實(shí)例打開一個(gè)查詢分析器,在其中輸入:declare@iintset@i=1while@i<1000beginselect*fromStudentset@i=@i+1End打開一個(gè)新的查詢分析器,在其中輸入:declare@iintset@i=1while@i<1000beginselectSno,Sname,Ssex,Sage,SdeptfromStudentset@i=@i+1end避免使用DISTINCT語句使用DISTINCT是為了保證在結(jié)果集中不出現(xiàn)重復(fù)值,但是DISTINCT會(huì)產(chǎn)生一張工作表,通過排序來刪除重復(fù)記錄,大大增加查詢和I/O的操作次數(shù)。因此應(yīng)當(dāng)避免使用DISTINCT關(guān)鍵字。但當(dāng)必須從結(jié)果集中刪除重復(fù)行時(shí),不能因?yàn)樾阅艿脑蚨苊馐褂肈ISTINCT。調(diào)整WHERE子句中連接條件的順序在SQL語句查詢語句中,使用最多的是WHERE子句。對(duì)于查詢大量數(shù)據(jù)的數(shù)據(jù)表來說WHERE子句后面的連接條件順序會(huì)對(duì)數(shù)據(jù)的查詢效率造成很大的影響。選擇一個(gè)好的連接條件的順序是非常重要的。將能去除掉較多記錄的條件語句放在前面調(diào)整WHERE子句中連接條件的順序第一種查詢方法:SELECTempno,eName,salary,eptnoFROMemployeeWHEREsalary>1000ANDsalary<3000第二種查詢方法:SELECTempno,eName,salary,eptnoFROMemployeeWHEREsalary<3000ANDsalary>1000避免使用OR關(guān)鍵字如果想要查詢與列表匹配的記錄,可以有兩種方式,一種是使用OR關(guān)鍵字,另外一種就是使用IN關(guān)鍵字。在SQL語句中盡量使用IN關(guān)鍵字代替OR關(guān)鍵字。因?yàn)镺R關(guān)鍵字并不會(huì)使用索引,因此,使用IN關(guān)鍵字可以提高數(shù)據(jù)的查詢速度。正確使用EXISTS和IN關(guān)鍵字在WHERE子句中提供了兩種相關(guān)子查詢的方法,一種是使用EXISTS關(guān)鍵字,一種是使用IN關(guān)鍵字。通過使用EXISTS,系統(tǒng)首先檢查主查詢,然后運(yùn)行子查詢直到它找到第一個(gè)匹配項(xiàng)。系統(tǒng)在執(zhí)行IN子查詢時(shí),首先將主查詢掛起,然后執(zhí)行子查詢,待子查詢執(zhí)行完畢,結(jié)果存放在臨時(shí)表中,再執(zhí)行主查詢。故一般來說,使用EXISTS比使用IN查詢速度要快。避免使用負(fù)邏輯負(fù)邏輯如!=、<>、not等操作,都會(huì)使系統(tǒng)無法使用索引。當(dāng)表較大時(shí),會(huì)嚴(yán)重影響系統(tǒng)性能??梢杂脛e的操作來代替,如用>或<來代替<>。SELECTSno,SnameFROMStudentWHERESSex!=‘女’SELECTSno,SnameFROMStudentWHERE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學(xué)《辦公室事務(wù)管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東司法警官職業(yè)學(xué)院《自動(dòng)變速器》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東培正學(xué)院《海關(guān)報(bào)關(guān)實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級(jí)上冊(cè)《5.1.1 從算式到方程》課件與作業(yè)
- 七年級(jí)上冊(cè)《2.2.1 第1課時(shí) 有理數(shù)的乘法》課件與作業(yè)
- 廣東茂名幼兒師范??茖W(xué)?!栋l(fā)動(dòng)機(jī)構(gòu)造與原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《三維動(dòng)畫基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 一年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)1000題匯編
- 物流工作總結(jié)范文10篇
- 【北京特級(jí)教師】2020-2021學(xué)年人教版高中地理必修二輔導(dǎo)講義:工業(yè)區(qū)位選擇和工業(yè)地域
- 民用無人駕駛航空器產(chǎn)品標(biāo)識(shí)要求
- 2025年上半年河南省西峽縣部分事業(yè)單位招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案-1
- 深交所創(chuàng)業(yè)板注冊(cè)制發(fā)行上市審核動(dòng)態(tài)(2020-2022)
- 手術(shù)室護(hù)理組長(zhǎng)競(jìng)聘
- 電力系統(tǒng)繼電保護(hù)試題以及答案(二)
- 小學(xué)生防打架斗毆安全教育
- 2024年醫(yī)院產(chǎn)科工作計(jì)劃例文(4篇)
- 2024-2025學(xué)年九年級(jí)英語上學(xué)期期末真題復(fù)習(xí) 專題09 單詞拼寫(安徽專用)
- 網(wǎng)絡(luò)運(yùn)營(yíng)代銷合同范例
- 江西省贛州市尋烏縣2023-2024學(xué)年八年級(jí)上學(xué)期期末檢測(cè)數(shù)學(xué)試卷(含解析)
- 2024年新人教版七年級(jí)上冊(cè)歷史 第14課 絲綢之路的開通與經(jīng)營(yíng)西域
評(píng)論
0/150
提交評(píng)論