優化SQL Server索引的技巧

2021-05-24 09:23:27 字數 1420 閱讀 5783

關於索引的常識

影響到資料庫效能的最大因素就是索引。由於該問題的複雜性,我只可能簡單的談談這個問題,不過關於這方面的問題,目前有好幾本不錯的書籍可供你參閱。我在這裡只討論兩種sql server索引,即clustered索引和nonclustered索引。當考察建立什麼型別的索引時,你應當考慮資料型別和儲存這些資料的column。同樣,你也必須考慮資料庫可能用到的查詢型別以及使用的最為頻繁的查詢型別。

索引的型別

如果column儲存了高度相關的資料,並且常常被順序訪問時,最好使用clustered索引,這是因為如果使用clustered索引,sql server會在物理上按公升序(預設)或者降序重排資料列,這樣就可以迅速的找到被查詢的資料。同樣,在搜尋控制在一定範圍內的情況下,對這些column也最好使用clustered索引。這是因為由於物理上重排資料,每個**上只有乙個clustered索引。

與上面情況相反,如果columns包含的資料相關性較差,你可以使用nonculstered索引。你可以在乙個**中使用高達249個nonclustered索引——儘管我想象不出實際應用場合會用的上這麼多索引。

當**使用主關鍵字(primary keys),預設情況下sql server會自動對包含該關鍵字的column(s)建立乙個獨有的cluster索引。很顯然,對這些column(s)建立獨有索引意味著主關鍵字的唯一性。當建立外關鍵字(foreign key)關係時,如果你打算頻繁使用它,那麼在外關鍵字cloumn上建立nonclustered索引不失為乙個好的方法。如果**有clustered索引,那麼它用乙個鍊錶來維護資料頁之間的關係。相反,如果**沒有clustered索引,sql server將在乙個堆疊中儲存資料頁。

資料頁當你執行上述措施中的任何乙個,資料庫引擎可以更有效的返回編入索引的資料。關於填充因子(fillfactor)話題已經超出了本文的範疇,不過我還是提醒你需要注意那些打算使用填充因子建立索引的**。

在執行查詢時,sql server動態選擇使用哪個索引。為此,sql server根據每個索引上分布在該關鍵字上的統計量來決定使用哪個索引。值得注意的是,經過日常的資料庫活動(如插入、刪除和更新**),sql server用到的這些統計量可能已經「過期」了,需要更新。你可以通過執行dbcc showcontig來檢視統計量的狀態。當你認為統計量已經「過期」時,你可以執行該**的update statistics命令,這樣sql server就重新整理了關於該索引的資訊了。

建立資料庫維護計畫

sql server提供了一種簡化並自動維護資料庫的工具。這個稱之為資料庫維護計畫嚮導(database maintenance plan wizard ,dmpw)的工具也包括了對索引的優化。如果你執行這個嚮導,你會看到關於資料庫中關於索引的統計量,這些統計量作為日誌工作並定時更新,這樣就減輕了手工重建索引所帶來的工作量。如果你不想自動定期重新整理索引統計量,你還可以在dmpw中選擇重新組織資料和資料頁,這將停止舊有索引並按特定的填充因子重建索引。

優化SQLServer索引

優化sqlserver索引的小技巧 sqlserver中有幾個可以讓你檢測 調整和優化sqlserver效能的工具。在本文中,我將說明如何用sqlserver的工具來優化資料庫索引的使用,本文還涉及到有關索引的一般性知識。關於索引的常識 影響到資料庫效能的最大因素就是索引。由於該問題的複雜性,我只可...

優化SQLServer索引的小技巧

優化sqlserver索引的小技巧 sqlserver中有幾個可以讓你檢測 調整和優化sqlserver效能的工具。在本文中,我將說明如何用sqlserver的工具來優化資料庫索引的使用,本文還涉及到有關索引的一般性知識。關於索引的常識 影響到資料庫效能的最大因素就是索引。由於該問題的複雜性,我只可...

SQLServer 聚集索引優化方案

最近接到客戶提報的問題 無線上傳的資料,伺服器處理速度太慢了,300條資料處理了10分鐘。太誇張了!分析原因發現同事在匯入這個系統時是按照原來專案資料庫生成的指令碼,可是沒有發現這些指令碼都沒有索引。發現這個問題後,我大悅。立馬按照原來的索引生成後給了客戶,客戶反映提高很多!可是用了沒多長時間,同乙...