熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

優化SQL Server索引的小技巧

2022-06-13   來源: SQL Server 

  SQL Server中有幾個可以讓你檢測調整和優化SQL Server性能的工具在本文中我將說明如何用SQL Server的工具來優化數據庫索引的使用本文還涉及到有關索引的一般性知識
  
  關於索引的常識
  
  
  影響到數據庫性能的最大因素就是索引由於該問題的復雜性我只可能簡單的談談這個問題不過關於這方面的問題目前有好幾本不錯的書籍可供你參閱我在這裡只討論兩種SQL Server索引即clustered索引和nonclustered索引當考察建立什麼類型的索引時你應當考慮數據類型和保存這些數據的column同樣你也必須考慮數據庫可能用到的查詢類型以及使用的最為頻繁的查詢類型
  
  索引的類型
  如果column保存了高度相關的數據並且常常被順序訪問時最好使用clustered索引這是因為如果使用clustered索引SQL Server會在物理上按升序(默認)或者降序重排數據列這樣就可以迅速的找到被查詢的數據同樣在搜尋控制在一定范圍內的情況下對這些column也最好使用clustered索引這是因為由於物理上重排數據每個表格上只有一個clustered索引
  
  與上面情況相反如果columns包含的數據相關性較差你可以使用nonculstered索引你可以在一個表格中使用高達個nonclustered索引——盡管我想象不出實際應用場合會用的上這麼多索引
  
  當表格使用主關鍵字(primary keys)默認情況下SQL Server會自動對包含該關鍵字的column(s)建立一個獨有的cluster索引很顯然對這些column(s)建立獨有索引意味著主關鍵字的唯一性當建立外關鍵字(foreign key)關系時如果你打算頻繁使用它那麼在外關鍵字cloumn上建立nonclustered索引不失為一個好的方法如果表格有clustered索引那麼它用一個鏈表來維護數據頁之間的關系相反如果表格沒有clustered索引SQL Server將在一個堆棧中保存數據頁
  
  數據頁
  當索引建立起來的時候SQLServer就建立數據頁(datapage)數據頁是用以加速搜索的指針當索引建立起來的時候其對應的填充因子也即被設置設置填充因子的目的是為了指示該索引中數據頁的百分比隨著時間的推移數據庫的更新會消耗掉已有的空閒空間這就會導致頁被拆分頁拆分的後果是降低了索引的性能因而使用該索引的查詢會導致數據存儲的支離破碎當建立一個索引時該索引的填充因子即被設置好了因此填充因子不能動態維護
  
  為了更新數據頁中的填充因子我們可以停止舊有索引並重建索引並重新設置填充因子(注意這將影響到當前數據庫的運行在重要場合請謹慎使用)DBCC INDEXDEFRAG和DBCC DBREINDEX是清除clustered和nonculstered索引碎片的兩個命令INDEXDEFRAG是一種在線操作(也就是說它不會阻塞其它表格動作如查詢)而DBREINDEX則在物理上重建索引在絕大多數情況下重建索引可以更好的消除碎片但是這個優點是以阻塞當前發生在該索引所在表格上其它動作為代價換取來得當出現較大的碎片索引時INDEXDEFRAG會花上一段比較長的時間這是因為該命令的運行是基於小的交互塊(transactional block)
  
  填充因子
  當你執行上述措施中的任何一個數據庫引擎可以更有效的返回編入索引的數據關於填充因子(fillfactor)話題已經超出了本文的范疇不過我還是提醒你需要注意那些打算使用填充因子建立索引的表格
  
  在執行查詢時SQL Server動態選擇使用哪個索引為此SQL Server根據每個索引上分布在該關鍵字上的統計量來決定使用哪個索引值得注意的是經過日常的數據庫活動(如插入刪除和更新表格)SQL Server用到的這些統計量可能已經過期需要更新你可以通過執行DBCC SHOWCONTIG來查看統計量的狀態當你認為統計量已經過期你可以執行該表格的UPDATE STATISTICS命令這樣SQL Server就刷新了關於該索引的信息了
  
  建立數據庫維護計劃
  SQL Server提供了一種簡化並自動維護數據庫的工具這個稱之為數據庫維護計劃向導(Database Maintenance Plan Wizard DMPW)的工具也包括了對索引的優化如果你運行這個向導你會看到關於數據庫中關於索引的統計量這些統計量作為日志工作並定時更新這樣就減輕了手工重建索引所帶來的工作量如果你不想自動定期刷新索引統計量你還可以在DMPW中選擇重新組織數據和數據頁這將停止舊有索引並按特定的填充因子重建索引

From:http://tw.wingwit.com/Article/program/SQLServer/201311/22246.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.