SQL Server數(shù)據(jù)庫性能優(yōu)化技術(shù)第1/2頁
更新時(shí)間:2007年06月14日 00:00:00 作者:
設(shè)計(jì)1個(gè)應(yīng)用系統(tǒng)似乎并不難,但是要想使系統(tǒng)達(dá)到最優(yōu)化的性能并不是一件容易的事。在開發(fā)工具、數(shù)據(jù)庫設(shè)計(jì)、應(yīng)
用程序的結(jié)構(gòu)、查詢?cè)O(shè)計(jì)、接口選擇等方面有多種選擇,這取決于特定的應(yīng)用需求以及開發(fā)隊(duì)伍的技能。本文以SQL
Server為例,從后臺(tái)數(shù)據(jù)庫的角度討論應(yīng)用程序性能優(yōu)化技巧,并且給出了一些有益的建議。
1 數(shù)據(jù)庫設(shè)計(jì)
要在良好的SQL Server方案中實(shí)現(xiàn)最優(yōu)的性能,最關(guān)鍵的是要有1個(gè)很好的數(shù)據(jù)庫設(shè)計(jì)方案。在實(shí)際工作中,許多SQL
Server方案往往是由于數(shù)據(jù)庫設(shè)計(jì)得不好導(dǎo)致性能很差。所以,要實(shí)現(xiàn)良好的數(shù)據(jù)庫設(shè)計(jì)就必須考慮這些問題。
1.1 邏輯庫規(guī)范化問題
一般來說,邏輯數(shù)據(jù)庫設(shè)計(jì)會(huì)滿足規(guī)范化的前3級(jí)標(biāo)準(zhǔn):
1.第1規(guī)范:沒有重復(fù)的組或多值的列。
2.第2規(guī)范:每個(gè)非關(guān)鍵字段必須依賴于主關(guān)鍵字,不能依賴于1個(gè)組合式主關(guān)鍵字的某些組成部分。
3.第3規(guī)范:1個(gè)非關(guān)鍵字段不能依賴于另1個(gè)非關(guān)鍵字段。
遵守這些規(guī)則的設(shè)計(jì)會(huì)產(chǎn)生較少的列和更多的表,因而也就減少了數(shù)據(jù)冗余,也減少了用于存儲(chǔ)數(shù)據(jù)的頁。但表關(guān)系
也許需要通過復(fù)雜的合并來處理,這樣會(huì)降低系統(tǒng)的性能。某種程度上的非規(guī)范化可以改善系統(tǒng)的性能,非規(guī)范化過程可
以根據(jù)性能方面不同的考慮用多種不同的方法進(jìn)行,但以下方法經(jīng)實(shí)踐驗(yàn)證往往能提高性能。
1.如果規(guī)范化設(shè)計(jì)產(chǎn)生了許多4路或更多路合并關(guān)系,就可以考慮在數(shù)據(jù)庫實(shí)體(表)中加入重復(fù)屬性(列)。
2.常用的計(jì)算字段(如總計(jì)、最大值等)可以考慮存儲(chǔ)到數(shù)據(jù)庫實(shí)體中。
比如某一個(gè)項(xiàng)目的計(jì)劃管理系統(tǒng)中有計(jì)劃表,其字段為:項(xiàng)目編號(hào)、年初計(jì)劃、二次計(jì)劃、調(diào)整計(jì)劃、補(bǔ)列計(jì)劃…,
而計(jì)劃總數(shù)(年初計(jì)劃+二次計(jì)劃+調(diào)整計(jì)劃+補(bǔ)列計(jì)劃)是用戶經(jīng)常需要在查詢和報(bào)表中用到的,在表的記錄量很大時(shí),有必
要把計(jì)劃總數(shù)作為1個(gè)獨(dú)立的字段加入到表中。這里可以采用觸發(fā)器以在客戶端保持?jǐn)?shù)據(jù)的一致性。
3.重新定義實(shí)體以減少外部屬性數(shù)據(jù)或行數(shù)據(jù)的開支。相應(yīng)的非規(guī)范化類型是:
(1)把1個(gè)實(shí)體(表)分割成2個(gè)表(把所有的屬性分成2組)。這樣就把頻繁被訪問的數(shù)據(jù)同較少被訪問的數(shù)據(jù)分開了。這
種方法要求在每個(gè)表中復(fù)制首要關(guān)鍵字。這樣產(chǎn)生的設(shè)計(jì)有利于并行處理,并將產(chǎn)生列數(shù)較少的表。
(2)把1個(gè)實(shí)體(表)分割成2個(gè)表(把所有的行分成2組)。這種方法適用于那些將包含大量數(shù)據(jù)的實(shí)體(表)。在應(yīng)用中常
要保留歷史記錄,但是歷史記錄很少用到。因此可以把頻繁被訪問的數(shù)據(jù)同較少被訪問的歷史數(shù)據(jù)分開。而且如果數(shù)據(jù)行
是作為子集被邏輯工作組(部門、銷售分區(qū)、地理區(qū)域等)訪問的,那么這種方法也是很有好處的。
1.2 生成物理數(shù)據(jù)庫
要想正確選擇基本物理實(shí)現(xiàn)策略,必須懂得數(shù)據(jù)庫訪問格式和硬件資源的操作特點(diǎn),主要是內(nèi)存和磁盤子系統(tǒng)I/O。這
是一個(gè)范圍廣泛的話題,但以下的準(zhǔn)則可能會(huì)有所幫助。
1.與每個(gè)表列相關(guān)的數(shù)據(jù)類型應(yīng)該反映數(shù)據(jù)所需的最小存儲(chǔ)空間,特別是對(duì)于被索引的列更是如此。比如能使用
smallint類型就不要用integer類型,這樣索引字段可以被更快地讀取,而且可以在1個(gè)數(shù)據(jù)頁上放置更多的數(shù)據(jù)行,因而
也就減少了I/O操作。
2.把1個(gè)表放在某個(gè)物理設(shè)備上,再通過SQL Server段把它的不分簇索引放在1個(gè)不同的物理設(shè)備上,這樣能提高性
能。尤其是系統(tǒng)采用了多個(gè)智能型磁盤控制器和數(shù)據(jù)分離技術(shù)的情況下,這樣做的好處更加明顯。
3.用SQL Server段把一個(gè)頻繁使用的大表分割開,并放在2個(gè)單獨(dú)的智能型磁盤控制器的數(shù)據(jù)庫設(shè)備上,這樣也可以提
高性能。因?yàn)橛卸鄠€(gè)磁頭在查找,所以數(shù)據(jù)分離也能提高性能。
4.用SQL Server段把文本或圖像列的數(shù)據(jù)存放在1個(gè)單獨(dú)的物理設(shè)備上可以提高性能。1個(gè)專用的智能型的控制器能進(jìn)
一步提高性能。
2 與SQL Server相關(guān)的硬件系統(tǒng)
與SQL Server有關(guān)的硬件設(shè)計(jì)包括系統(tǒng)處理器、內(nèi)存、磁盤子系統(tǒng)和網(wǎng)絡(luò),這4個(gè)部分基本上構(gòu)成了硬件平臺(tái),
Windows NT和SQL Server運(yùn)行于其上。
2.1 系統(tǒng)處理器(CPU)
根據(jù)自己的具體需要確定CPU結(jié)構(gòu)的過程就是估計(jì)在硬件平臺(tái)上占用CPU的工作量的過程。從以往的經(jīng)驗(yàn)看,CPU配置最
少應(yīng)是1個(gè)80586/100處理器。如果只有2~3個(gè)用戶,這就足夠了,但如果打算支持更多的用戶和關(guān)鍵應(yīng)用,推薦采用
Pentium Pro或PⅡ級(jí)CPU。
2.2 內(nèi)存(RAM)
為SQL Server方案確定合適的內(nèi)存設(shè)置對(duì)于實(shí)現(xiàn)良好的性能是至關(guān)重要的。SQL Server用內(nèi)存做過程緩存、數(shù)據(jù)和索
引項(xiàng)緩存、靜態(tài)服務(wù)器開支和設(shè)置開支。SQL Server最多能利用2GB虛擬內(nèi)存,這也是最大的設(shè)置值。還有一點(diǎn)必須考慮的
是Windows NT和它的所有相關(guān)的服務(wù)也要占用內(nèi)存。
Windows NT為每個(gè)WIN32應(yīng)用程序提供了4GB的虛擬地址空間。這個(gè)虛擬地址空間由Windows NT虛擬內(nèi)存管理器(VMM)映
射到物理內(nèi)存上,在某些硬件平臺(tái)上可以達(dá)到4GB。SQL Server應(yīng)用程序只知道虛擬地址,所以不能直接訪問物理內(nèi)存,這
個(gè)訪問是由VMM控制的。Windows NT允許產(chǎn)生超出可用的物理內(nèi)存的虛擬地址空間,這樣當(dāng)給SQL Server分配的虛擬內(nèi)存多
于可用的物理內(nèi)存時(shí),會(huì)降低SQL Server的性能。
這些地址空間是專門為SQL Server系統(tǒng)設(shè)置的,所以如果在同一硬件平臺(tái)上還有其它軟件(如文件和打印共享,應(yīng)用程
序服務(wù)等)在運(yùn)行,那么應(yīng)該考慮到它們也占用一部分內(nèi)存。一般來說硬件平臺(tái)至少要配置32MB的內(nèi)存,其中,Windows NT
至少要占用16MB。1個(gè)簡(jiǎn)單的法則是,給每一個(gè)并發(fā)的用戶增加100KB的內(nèi)存。例如,如果有100個(gè)并發(fā)的用戶,則至少需要
32MB+100用戶*100KB=42MB內(nèi)存,實(shí)際的使用數(shù)量還需要根據(jù)運(yùn)行的實(shí)際情況調(diào)整??梢哉f,提高內(nèi)存是提高系統(tǒng)性能的
最經(jīng)濟(jì)的途徑。
2.3 磁盤子系統(tǒng)
設(shè)計(jì)1個(gè)好的磁盤I/O系統(tǒng)是實(shí)現(xiàn)良好的SQL Server方案的一個(gè)很重要的方面。這里討論的磁盤子系統(tǒng)至少有1個(gè)磁盤控
制設(shè)備和1個(gè)或多個(gè)硬盤單元,還有對(duì)磁盤設(shè)置和文件系統(tǒng)的考慮。智能型SCSI-2磁盤控制器或磁盤組控制器是不錯(cuò)的選
擇,其特點(diǎn)如下:
(1)控制器高速緩存。
(2)總線主板上有處理器,可以減少對(duì)系統(tǒng)CPU的中斷。
(3)異步讀寫支持。
(4)32位RAID支持。
(5)快速SCSI—2驅(qū)動(dòng)。
(6)超前讀高速緩存(至少1個(gè)磁道)。
3 檢索策略
在精心選擇了硬件平臺(tái),又實(shí)現(xiàn)了1個(gè)良好的數(shù)據(jù)庫方案,并且具備了用戶需求和應(yīng)用方面的知識(shí)后,現(xiàn)在應(yīng)該設(shè)計(jì)查
詢和索引了。有2個(gè)方面對(duì)于在SQL Server上取得良好的查詢和索引性能是十分重要的,第1是根據(jù)SQL Server優(yōu)化器方面
的知識(shí)生成查詢和索引;第2是利用SQL Server的性能特點(diǎn),加強(qiáng)數(shù)據(jù)訪問操作。
3.1 SQL Server優(yōu)化器
Microsoft SQL Server數(shù)據(jù)庫內(nèi)核用1個(gè)基于費(fèi)用的查詢優(yōu)化器自動(dòng)優(yōu)化向SQL提交的數(shù)據(jù)查詢操作。數(shù)據(jù)操作查詢是
指支持SQL關(guān)鍵字WHERE或HAVING的查詢,如SELECT、DELETE和UPDATE。基于費(fèi)用的查詢優(yōu)化器根據(jù)統(tǒng)計(jì)信息產(chǎn)生子句的費(fèi)
用估算。
了解優(yōu)化器數(shù)據(jù)處理過程的簡(jiǎn)單方法是檢測(cè)SHOWPLAN命令的輸出結(jié)果。如果用基于字符的工具(例如isql),可以通過
鍵入SHOW SHOWPLAN ON來得到SHOWPLAN命令的輸出。如果使用圖形化查詢,比如SQL Enterprise Manager中的查詢工具或
isql/w,可以設(shè)定配置選項(xiàng)來提供這一信息。
SQL Server的優(yōu)化通過3個(gè)階段完成:查詢分析、索引選擇、合并選擇。
1.查詢分析
在查詢分析階段,SQL Server優(yōu)化器查看每一個(gè)由正規(guī)查詢樹代表的子句,并判斷它是否能被優(yōu)化。SQL Server一般
會(huì)盡量?jī)?yōu)化那些限制掃描的子句。例如,搜索和/或合并子句。但是不是所有合法的SQL語法都可以分成可優(yōu)化的子句,如
含有SQL不等關(guān)系符“<>”的子句。因?yàn)椤?lt;>”是1個(gè)排斥性的操作符,而不是1個(gè)包括性的操作符,所在掃描整個(gè)表之前無
法確定子句的選擇范圍會(huì)有多大。當(dāng)1個(gè)關(guān)系型查詢中含有不可優(yōu)化的子句時(shí),執(zhí)行計(jì)劃用表掃描來訪問查詢的這個(gè)部分,
對(duì)于查詢樹中可優(yōu)化的SQL Server子句,則由優(yōu)化器執(zhí)行索引選擇。
用程序的結(jié)構(gòu)、查詢?cè)O(shè)計(jì)、接口選擇等方面有多種選擇,這取決于特定的應(yīng)用需求以及開發(fā)隊(duì)伍的技能。本文以SQL
Server為例,從后臺(tái)數(shù)據(jù)庫的角度討論應(yīng)用程序性能優(yōu)化技巧,并且給出了一些有益的建議。
1 數(shù)據(jù)庫設(shè)計(jì)
要在良好的SQL Server方案中實(shí)現(xiàn)最優(yōu)的性能,最關(guān)鍵的是要有1個(gè)很好的數(shù)據(jù)庫設(shè)計(jì)方案。在實(shí)際工作中,許多SQL
Server方案往往是由于數(shù)據(jù)庫設(shè)計(jì)得不好導(dǎo)致性能很差。所以,要實(shí)現(xiàn)良好的數(shù)據(jù)庫設(shè)計(jì)就必須考慮這些問題。
1.1 邏輯庫規(guī)范化問題
一般來說,邏輯數(shù)據(jù)庫設(shè)計(jì)會(huì)滿足規(guī)范化的前3級(jí)標(biāo)準(zhǔn):
1.第1規(guī)范:沒有重復(fù)的組或多值的列。
2.第2規(guī)范:每個(gè)非關(guān)鍵字段必須依賴于主關(guān)鍵字,不能依賴于1個(gè)組合式主關(guān)鍵字的某些組成部分。
3.第3規(guī)范:1個(gè)非關(guān)鍵字段不能依賴于另1個(gè)非關(guān)鍵字段。
遵守這些規(guī)則的設(shè)計(jì)會(huì)產(chǎn)生較少的列和更多的表,因而也就減少了數(shù)據(jù)冗余,也減少了用于存儲(chǔ)數(shù)據(jù)的頁。但表關(guān)系
也許需要通過復(fù)雜的合并來處理,這樣會(huì)降低系統(tǒng)的性能。某種程度上的非規(guī)范化可以改善系統(tǒng)的性能,非規(guī)范化過程可
以根據(jù)性能方面不同的考慮用多種不同的方法進(jìn)行,但以下方法經(jīng)實(shí)踐驗(yàn)證往往能提高性能。
1.如果規(guī)范化設(shè)計(jì)產(chǎn)生了許多4路或更多路合并關(guān)系,就可以考慮在數(shù)據(jù)庫實(shí)體(表)中加入重復(fù)屬性(列)。
2.常用的計(jì)算字段(如總計(jì)、最大值等)可以考慮存儲(chǔ)到數(shù)據(jù)庫實(shí)體中。
比如某一個(gè)項(xiàng)目的計(jì)劃管理系統(tǒng)中有計(jì)劃表,其字段為:項(xiàng)目編號(hào)、年初計(jì)劃、二次計(jì)劃、調(diào)整計(jì)劃、補(bǔ)列計(jì)劃…,
而計(jì)劃總數(shù)(年初計(jì)劃+二次計(jì)劃+調(diào)整計(jì)劃+補(bǔ)列計(jì)劃)是用戶經(jīng)常需要在查詢和報(bào)表中用到的,在表的記錄量很大時(shí),有必
要把計(jì)劃總數(shù)作為1個(gè)獨(dú)立的字段加入到表中。這里可以采用觸發(fā)器以在客戶端保持?jǐn)?shù)據(jù)的一致性。
3.重新定義實(shí)體以減少外部屬性數(shù)據(jù)或行數(shù)據(jù)的開支。相應(yīng)的非規(guī)范化類型是:
(1)把1個(gè)實(shí)體(表)分割成2個(gè)表(把所有的屬性分成2組)。這樣就把頻繁被訪問的數(shù)據(jù)同較少被訪問的數(shù)據(jù)分開了。這
種方法要求在每個(gè)表中復(fù)制首要關(guān)鍵字。這樣產(chǎn)生的設(shè)計(jì)有利于并行處理,并將產(chǎn)生列數(shù)較少的表。
(2)把1個(gè)實(shí)體(表)分割成2個(gè)表(把所有的行分成2組)。這種方法適用于那些將包含大量數(shù)據(jù)的實(shí)體(表)。在應(yīng)用中常
要保留歷史記錄,但是歷史記錄很少用到。因此可以把頻繁被訪問的數(shù)據(jù)同較少被訪問的歷史數(shù)據(jù)分開。而且如果數(shù)據(jù)行
是作為子集被邏輯工作組(部門、銷售分區(qū)、地理區(qū)域等)訪問的,那么這種方法也是很有好處的。
1.2 生成物理數(shù)據(jù)庫
要想正確選擇基本物理實(shí)現(xiàn)策略,必須懂得數(shù)據(jù)庫訪問格式和硬件資源的操作特點(diǎn),主要是內(nèi)存和磁盤子系統(tǒng)I/O。這
是一個(gè)范圍廣泛的話題,但以下的準(zhǔn)則可能會(huì)有所幫助。
1.與每個(gè)表列相關(guān)的數(shù)據(jù)類型應(yīng)該反映數(shù)據(jù)所需的最小存儲(chǔ)空間,特別是對(duì)于被索引的列更是如此。比如能使用
smallint類型就不要用integer類型,這樣索引字段可以被更快地讀取,而且可以在1個(gè)數(shù)據(jù)頁上放置更多的數(shù)據(jù)行,因而
也就減少了I/O操作。
2.把1個(gè)表放在某個(gè)物理設(shè)備上,再通過SQL Server段把它的不分簇索引放在1個(gè)不同的物理設(shè)備上,這樣能提高性
能。尤其是系統(tǒng)采用了多個(gè)智能型磁盤控制器和數(shù)據(jù)分離技術(shù)的情況下,這樣做的好處更加明顯。
3.用SQL Server段把一個(gè)頻繁使用的大表分割開,并放在2個(gè)單獨(dú)的智能型磁盤控制器的數(shù)據(jù)庫設(shè)備上,這樣也可以提
高性能。因?yàn)橛卸鄠€(gè)磁頭在查找,所以數(shù)據(jù)分離也能提高性能。
4.用SQL Server段把文本或圖像列的數(shù)據(jù)存放在1個(gè)單獨(dú)的物理設(shè)備上可以提高性能。1個(gè)專用的智能型的控制器能進(jìn)
一步提高性能。
2 與SQL Server相關(guān)的硬件系統(tǒng)
與SQL Server有關(guān)的硬件設(shè)計(jì)包括系統(tǒng)處理器、內(nèi)存、磁盤子系統(tǒng)和網(wǎng)絡(luò),這4個(gè)部分基本上構(gòu)成了硬件平臺(tái),
Windows NT和SQL Server運(yùn)行于其上。
2.1 系統(tǒng)處理器(CPU)
根據(jù)自己的具體需要確定CPU結(jié)構(gòu)的過程就是估計(jì)在硬件平臺(tái)上占用CPU的工作量的過程。從以往的經(jīng)驗(yàn)看,CPU配置最
少應(yīng)是1個(gè)80586/100處理器。如果只有2~3個(gè)用戶,這就足夠了,但如果打算支持更多的用戶和關(guān)鍵應(yīng)用,推薦采用
Pentium Pro或PⅡ級(jí)CPU。
2.2 內(nèi)存(RAM)
為SQL Server方案確定合適的內(nèi)存設(shè)置對(duì)于實(shí)現(xiàn)良好的性能是至關(guān)重要的。SQL Server用內(nèi)存做過程緩存、數(shù)據(jù)和索
引項(xiàng)緩存、靜態(tài)服務(wù)器開支和設(shè)置開支。SQL Server最多能利用2GB虛擬內(nèi)存,這也是最大的設(shè)置值。還有一點(diǎn)必須考慮的
是Windows NT和它的所有相關(guān)的服務(wù)也要占用內(nèi)存。
Windows NT為每個(gè)WIN32應(yīng)用程序提供了4GB的虛擬地址空間。這個(gè)虛擬地址空間由Windows NT虛擬內(nèi)存管理器(VMM)映
射到物理內(nèi)存上,在某些硬件平臺(tái)上可以達(dá)到4GB。SQL Server應(yīng)用程序只知道虛擬地址,所以不能直接訪問物理內(nèi)存,這
個(gè)訪問是由VMM控制的。Windows NT允許產(chǎn)生超出可用的物理內(nèi)存的虛擬地址空間,這樣當(dāng)給SQL Server分配的虛擬內(nèi)存多
于可用的物理內(nèi)存時(shí),會(huì)降低SQL Server的性能。
這些地址空間是專門為SQL Server系統(tǒng)設(shè)置的,所以如果在同一硬件平臺(tái)上還有其它軟件(如文件和打印共享,應(yīng)用程
序服務(wù)等)在運(yùn)行,那么應(yīng)該考慮到它們也占用一部分內(nèi)存。一般來說硬件平臺(tái)至少要配置32MB的內(nèi)存,其中,Windows NT
至少要占用16MB。1個(gè)簡(jiǎn)單的法則是,給每一個(gè)并發(fā)的用戶增加100KB的內(nèi)存。例如,如果有100個(gè)并發(fā)的用戶,則至少需要
32MB+100用戶*100KB=42MB內(nèi)存,實(shí)際的使用數(shù)量還需要根據(jù)運(yùn)行的實(shí)際情況調(diào)整??梢哉f,提高內(nèi)存是提高系統(tǒng)性能的
最經(jīng)濟(jì)的途徑。
2.3 磁盤子系統(tǒng)
設(shè)計(jì)1個(gè)好的磁盤I/O系統(tǒng)是實(shí)現(xiàn)良好的SQL Server方案的一個(gè)很重要的方面。這里討論的磁盤子系統(tǒng)至少有1個(gè)磁盤控
制設(shè)備和1個(gè)或多個(gè)硬盤單元,還有對(duì)磁盤設(shè)置和文件系統(tǒng)的考慮。智能型SCSI-2磁盤控制器或磁盤組控制器是不錯(cuò)的選
擇,其特點(diǎn)如下:
(1)控制器高速緩存。
(2)總線主板上有處理器,可以減少對(duì)系統(tǒng)CPU的中斷。
(3)異步讀寫支持。
(4)32位RAID支持。
(5)快速SCSI—2驅(qū)動(dòng)。
(6)超前讀高速緩存(至少1個(gè)磁道)。
3 檢索策略
在精心選擇了硬件平臺(tái),又實(shí)現(xiàn)了1個(gè)良好的數(shù)據(jù)庫方案,并且具備了用戶需求和應(yīng)用方面的知識(shí)后,現(xiàn)在應(yīng)該設(shè)計(jì)查
詢和索引了。有2個(gè)方面對(duì)于在SQL Server上取得良好的查詢和索引性能是十分重要的,第1是根據(jù)SQL Server優(yōu)化器方面
的知識(shí)生成查詢和索引;第2是利用SQL Server的性能特點(diǎn),加強(qiáng)數(shù)據(jù)訪問操作。
3.1 SQL Server優(yōu)化器
Microsoft SQL Server數(shù)據(jù)庫內(nèi)核用1個(gè)基于費(fèi)用的查詢優(yōu)化器自動(dòng)優(yōu)化向SQL提交的數(shù)據(jù)查詢操作。數(shù)據(jù)操作查詢是
指支持SQL關(guān)鍵字WHERE或HAVING的查詢,如SELECT、DELETE和UPDATE。基于費(fèi)用的查詢優(yōu)化器根據(jù)統(tǒng)計(jì)信息產(chǎn)生子句的費(fèi)
用估算。
了解優(yōu)化器數(shù)據(jù)處理過程的簡(jiǎn)單方法是檢測(cè)SHOWPLAN命令的輸出結(jié)果。如果用基于字符的工具(例如isql),可以通過
鍵入SHOW SHOWPLAN ON來得到SHOWPLAN命令的輸出。如果使用圖形化查詢,比如SQL Enterprise Manager中的查詢工具或
isql/w,可以設(shè)定配置選項(xiàng)來提供這一信息。
SQL Server的優(yōu)化通過3個(gè)階段完成:查詢分析、索引選擇、合并選擇。
1.查詢分析
在查詢分析階段,SQL Server優(yōu)化器查看每一個(gè)由正規(guī)查詢樹代表的子句,并判斷它是否能被優(yōu)化。SQL Server一般
會(huì)盡量?jī)?yōu)化那些限制掃描的子句。例如,搜索和/或合并子句。但是不是所有合法的SQL語法都可以分成可優(yōu)化的子句,如
含有SQL不等關(guān)系符“<>”的子句。因?yàn)椤?lt;>”是1個(gè)排斥性的操作符,而不是1個(gè)包括性的操作符,所在掃描整個(gè)表之前無
法確定子句的選擇范圍會(huì)有多大。當(dāng)1個(gè)關(guān)系型查詢中含有不可優(yōu)化的子句時(shí),執(zhí)行計(jì)劃用表掃描來訪問查詢的這個(gè)部分,
對(duì)于查詢樹中可優(yōu)化的SQL Server子句,則由優(yōu)化器執(zhí)行索引選擇。
您可能感興趣的文章:
- sqlserver數(shù)據(jù)庫規(guī)模膨脹太大怎么優(yōu)化
- SQL Server 聚焦存儲(chǔ)過程性能優(yōu)化、數(shù)據(jù)壓縮和頁壓縮提高IO性能方法(一)
- 日常收集整理SqlServer數(shù)據(jù)庫優(yōu)化經(jīng)驗(yàn)和注意事項(xiàng)
- SQL server 2008 數(shù)據(jù)庫優(yōu)化常用腳本
- sqlserver數(shù)據(jù)庫優(yōu)化解析(圖文剖析)
- sqlserver關(guān)于分頁存儲(chǔ)過程的優(yōu)化【讓數(shù)據(jù)庫按我們的意思執(zhí)行查詢計(jì)劃】
- SQL Server數(shù)據(jù)庫的高性能優(yōu)化經(jīng)驗(yàn)總結(jié)
- 開啟SQLSERVER數(shù)據(jù)庫緩存依賴優(yōu)化網(wǎng)站性能
- SQL Server 數(shù)據(jù)庫優(yōu)化
- SQL Server 數(shù)據(jù)太多優(yōu)化的方法
相關(guān)文章
JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門
這篇文章主要介紹了JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01DataGrip 連接 HiveServer2 報(bào)錯(cuò)的問題
這篇文章主要介紹了DataGrip 連接 HiveServer2 報(bào)錯(cuò)的問題,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09OLEDB和ODBC的區(qū)別(優(yōu)缺點(diǎn))
ODBC是一種連接數(shù)據(jù)庫的開放標(biāo)準(zhǔn),OLEDB(對(duì)象鏈接和嵌入數(shù)據(jù)庫)位于ODBC層與應(yīng)用程序之間. 在你的ASP頁面里,ADO是位于OLEDB之上的應(yīng)用程序. 你的ADO調(diào)用先被送到OLEDB,然后再交由ODBC處理2012-09-09分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的三要素
大家好,本篇文章主要講的是分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的三要素,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12SQL中where子句與having子句的區(qū)別小結(jié)
這篇文章主要給大家介紹了關(guān)于SQL中where子句與having子句的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12Access轉(zhuǎn)換成SQL Server需要注意事項(xiàng)整理
很多朋友想用SQL2000數(shù)據(jù)庫的編程方法,但是卻又苦于自己是學(xué)ACCESS的,對(duì)SQL只是一點(diǎn)點(diǎn)的了解而已,這里我給大家提供以下參考---將ACCESS轉(zhuǎn)化成SQL2000的方法和注意事項(xiàng)2008-04-04