欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL Server數(shù)據(jù)庫性能優(yōu)化技術

 更新時間:2007年06月14日 00:00:00   作者:  

  2.索引選擇 
  對于每個可優(yōu)化的子句,優(yōu)化器都查看數(shù)據(jù)庫系統(tǒng)表,以確定是否有相關的索引能用于訪問數(shù)據(jù)。只有當索引中的列 
的1個前綴與查詢子句中的列完全匹配時,這個索引才被認為是有用的。因為索引是根據(jù)列的順序構造的,所以要求匹配是 
精確的匹配。對于分簇索引,原來的數(shù)據(jù)也是根據(jù)索引列順序排序的。想用索引的次要列訪問數(shù)據(jù),就像想在電話本中查 
找所有姓為某個姓氏的條目一樣,排序基本上沒有什么用,因為你還是得查看每一行以確定它是否符合條件。如果1個子句 
有可用的索引,那么優(yōu)化器就會為它確定選擇性。 
  所以在設計過程中,要根據(jù)查詢設計準則仔細檢查所有的查詢,以查詢的優(yōu)化特點為基礎設計索引。 
  (1)比較窄的索引具有比較高的效率。對于比較窄的索引來說,每頁上能存放較多的索引行,而且索引的級別也較少。 
所以,緩存中能放置更多的索引頁,這樣也減少了I/O操作。 
  (2)SQL Server優(yōu)化器能分析大量的索引和合并可能性。所以與較少的寬索引相比,較多的窄索引能向優(yōu)化器提供更多 
的選擇。但是不要保留不必要的索引,因為它們將增加存儲和維護的開支。對于復合索引、組合索引或多列索引,SQL 
Server優(yōu)化器只保留最重要的列的分布統(tǒng)計信息,這樣,索引的第1列應該有很大的選擇性。 
  (3)表上的索引過多會影響UPDATE、INSERT和DELETE的性能,因為所有的索引都必須做相應的調(diào)整。另外,所有的分頁 
操作都被記錄在日志中,這也會增加I/O操作。   

  (4)對1個經(jīng)常被更新的列建立索引,會嚴重影響性能。 
  (5)由于存儲開支和I/O操作方面的原因,較小的自組索引比較大的索引性能更好一些。但它的缺點是要維護自組的 
列。 
  (6)盡量分析出每一個重要查詢的使用頻度,這樣可以找出使用最多的索引,然后可以先對這些索引進行適當?shù)膬?yōu)化。 
  (7)查詢中的WHERE子句中的任何列都很可能是個索引列,因為優(yōu)化器重點處理這個子句。 
  (8)對小于1個范圍的小型表進行索引是不劃算的,因為對于小表來說表掃描往往更快而且費用低。 
  (9)與“ORDER BY”或“GROUP BY”一起使用的列一般適于做分族索引。如果“ORDER BY”命令中用到的列上有分簇索 
引,那么就不會再生成1個工作表了,因為行已經(jīng)排序了。“GROUP BY”命令則一定產(chǎn)生1個工作表。 
  (10)分簇索引不應該構造在經(jīng)常變化的列上,因為這會引起整行的移動。在實現(xiàn)大型交易處理系統(tǒng)時,尤其要注意這 
一點,因為這些系統(tǒng)中數(shù)據(jù)往往是頻繁變化的。 
  3.合并選擇 
  當索引選擇結束,并且所有的子句都有了一個基于它們的訪問計劃的處理費用時,優(yōu)化器開始執(zhí)行合并選擇。合并選 
擇被用來找出一個用于合并子句訪問計劃的有效順序。為了做到這一點,優(yōu)化器比較子句的不同排序,然后選出從物理磁 
盤I/O的角度看處理費用最低的合并計劃。因為子句組合的數(shù)量會隨著查詢的復雜度極快地增長,SQL Server查詢優(yōu)化器使 
用樹剪枝技術來盡量減少這些比較所帶來的開支。當這個合并選擇階段結束時,SQL Server查詢優(yōu)化器已經(jīng)生成了1個基于 
費用的查詢執(zhí)行計劃,這個計劃充分利用了可用的索引,并以最小的系統(tǒng)開支和良好的執(zhí)行性能訪問原來的數(shù)據(jù)。 
3.2 高效的查詢選擇 
  從以上查詢優(yōu)化的3個階段不難看出,設計出物理I/O和邏輯I/O最少的方案并掌握好處理器時間和I/O時間的平衡,是 
高效查詢設計的主要目標。也就是說,希望設計出這樣的查詢:充分利用索引、磁盤讀寫最少、最高效地利用了內(nèi)存和CPU 
資源。 
  以下建議是從SQL Server優(yōu)化器的優(yōu)化策略中總結出來的,對于設計高效的查詢是很有幫助的。 
  1.如果有獨特的索引,那么帶有“=”操作符的WHERE子句性能最好,其次是封閉的區(qū)間(范圍),再其次是開放的區(qū) 
間。 
  2.從數(shù)據(jù)庫訪問的角度看,含有不連續(xù)連接詞(OR和IN)的WHERE子句一般來說性能不會太好。所以,優(yōu)化器可能會采用 
R策略,這種策略會生成1個工作表,其中含有每個可能匹配的執(zhí)行的標識符,優(yōu)化器把這些行標志符(頁號和行號)看做是 
指向1個表中匹配的行的“動態(tài)索引”。優(yōu)化器只需掃描工作表,取出每一個行標志符,再從數(shù)據(jù)表中取得相應的行,所以 
R策略的代價是生成工作表。 
  3.包含NOT、<>、或! =的WHERE子句對于優(yōu)化器的索引選擇來說沒有什么用處。因為這樣的子句是排斥性的,而不是 
包括性的,所以在掃描整個原來數(shù)據(jù)表之前無法確定子句的選擇性。 
  4.限制數(shù)據(jù)轉(zhuǎn)換和串操作,優(yōu)化器一般不會根據(jù)WHERE子句中的表達式和數(shù)據(jù)轉(zhuǎn)換式生成索引選擇。例如: 
  paycheck * 12>36000 or substring(lastname,1,1)=“L” 
  如果該表建立了針對paycheck和lastname的索引,就不能利用索引進行優(yōu)化,可以改寫上面的條件表達式為: 
  paycheck<36000/12 or lastname like “L%” 
  5.WHERE子句中的本地變量被認為是不被優(yōu)化器知道和考慮的,例外的情況是定義為儲備過程輸入?yún)?shù)的變量。 
  6.如果沒有包含合并子句的索引,那么優(yōu)化器構造1個工作表以存放合并中最小的表中的行。然后再在這個表上構造1 
個分簇索引以完成一個高效的合并。這種作法的代價是工作表的生成和隨后的分族索引的生成,這個過程叫 
REFORMATTING?! ∷詰撟⒁釸AM中或磁盤上的數(shù)據(jù)庫tempdb的大小(除了SELECT INTO語句)。另外,如果這些類型的 
操作是很常見的,那么把tempdb放在RAM中對于提高性能是很有好處的。 
4 性能優(yōu)化的其他考慮 
  上面列出了影響SQL Server的一些主要因素,實際上遠不止這些。操作系統(tǒng)的影響也很大,在Windows NT下,文件系 
統(tǒng)的選擇、網(wǎng)絡協(xié)議、開啟的服務、SQL Server的優(yōu)先級等選項也不同程度上影響了SQL Server的性能。 
  影響性能的因素是如此的多,而應用又各不相同,找出1個通用的優(yōu)化方案是不現(xiàn)實的,在系統(tǒng)開發(fā)和維護的過程中必 
須針對運行的情況,不斷加以調(diào)整。事實上,絕大部分的優(yōu)化和調(diào)整工作是在與客戶端獨立的服務器上進行的,因此也是 
現(xiàn)實可行的。

相關文章

  • JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門

    JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門

    這篇文章主要介紹了JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • DataGrip 連接 HiveServer2 報錯的問題

    DataGrip 連接 HiveServer2 報錯的問題

    這篇文章主要介紹了DataGrip 連接 HiveServer2 報錯的問題,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • OLEDB和ODBC的區(qū)別(優(yōu)缺點)

    OLEDB和ODBC的區(qū)別(優(yōu)缺點)

    ODBC是一種連接數(shù)據(jù)庫的開放標準,OLEDB(對象鏈接和嵌入數(shù)據(jù)庫)位于ODBC層與應用程序之間. 在你的ASP頁面里,ADO是位于OLEDB之上的應用程序. 你的ADO調(diào)用先被送到OLEDB,然后再交由ODBC處理
    2012-09-09
  • 分布式數(shù)據(jù)存儲系統(tǒng)的三要素

    分布式數(shù)據(jù)存儲系統(tǒng)的三要素

    大家好,本篇文章主要講的是分布式數(shù)據(jù)存儲系統(tǒng)的三要素,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • SQL注入之基于布爾的盲注詳解

    SQL注入之基于布爾的盲注詳解

    首先說明的盲注是注入的一種,指的是在不知道數(shù)據(jù)庫返回值的情況下對數(shù)據(jù)中的內(nèi)容進行猜測,實施SQL注入。盲注一般分為布爾盲注和基于時間的盲注。這篇文章主要講解的是基于布爾的盲注。下面來一起看看吧。
    2016-09-09
  • 簡單聊一聊SQL注入及防止SQL注入

    簡單聊一聊SQL注入及防止SQL注入

    眾所周知SQL注入是比較常見的網(wǎng)絡攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實現(xiàn)攻擊,而是針對程序員編程時的疏忽,通過SQL語句,實現(xiàn)無帳號登錄,下面這篇文章主要給大家介紹了關于SQL注入及防止SQL注入的相關資料,需要的朋友可以參考下
    2022-03-03
  • 為什么你不要收縮數(shù)據(jù)庫文件(國外翻譯)

    為什么你不要收縮數(shù)據(jù)庫文件(國外翻譯)

    這幾天查看了很多關于SQL SERVER收縮數(shù)據(jù)文件方面的文章,準備寫一篇關于收縮日志方面的文章,但是突然有種沖動將看過經(jīng)典的文章翻譯出來,需要的朋友可以參考下
    2018-03-03
  • 50條SQL查詢技巧、查詢語句示例

    50條SQL查詢技巧、查詢語句示例

    這篇文章主要介紹了50條SQL查詢技巧、查詢語句示例,本文以學生表、課程表、成績表、教師表為例,講解不同需求下的SQL語句寫法,需要的朋友可以參考下
    2015-06-06
  • SQL中where子句與having子句的區(qū)別小結

    SQL中where子句與having子句的區(qū)別小結

    這篇文章主要給大家介紹了關于SQL中where子句與having子句的區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • Access轉(zhuǎn)換成SQL Server需要注意事項整理

    Access轉(zhuǎn)換成SQL Server需要注意事項整理

    很多朋友想用SQL2000數(shù)據(jù)庫的編程方法,但是卻又苦于自己是學ACCESS的,對SQL只是一點點的了解而已,這里我給大家提供以下參考---將ACCESS轉(zhuǎn)化成SQL2000的方法和注意事項
    2008-04-04

最新評論