Sql-Server

刪除和重新創建索引

  • May 24, 2013

我最常遇到的情況是,使用者將那裡的數據庫從一台伺服器移動到另一台伺服器,並且在他們移動後立即面臨性能問題(緩慢)。

我設法重建索引或重新組織它們,並更新統計資訊,這沒什麼用。

刪除並重新創建索引,然後更新統計資訊會有幫助嗎?

一些注意事項:

  • 重建索引後,不要更新所有統計資訊!
  • 重建索引,不要重組

無論如何,索引重建都會重建統計資訊。進一步的更新實際上意味著由於採樣率的原因,您的統計數據會更差。您可以重建列統計資訊。

此外,值得比較伺服器規格(RAM、CPU、磁碟)和查詢計劃 XML。第二台伺服器是否有不同的連接選項,比如不同的 ARITHABORT 設置?

最後,進行比較(例如使用 Red Gate SQL 比較),但請確保您比較所有內容:統計數據、填充因子、批次。

索引碎片和統計資訊並不是導致性能問題的唯一可能原因。除了這個重建和重組是不同的過程。

  • INDEX REBUILD:刪除現有索引並重新創建索引。可以線上或離線完成。
  • INDEX REORGANIZATION:它在物理上重新組織索引的葉節點。它始終線上。

選擇哪一個?當索引碎片大於 30% 時,應該重建索引。當索引碎片在 5% 到 30% 之間時,應該重新組織索引。索引重建過程使用更多 CPU 並鎖定數據庫資源。ONLINE 選項僅適用於 SQL Server 開發企業版。如果沒有 ONLINE 子句,索引會被簡單地刪除並重新創建。考慮到由於大量碎片,優化器可能會改變自己使用索引的偏好。建議定期檢查索引碎片級別。

引用自:https://dba.stackexchange.com/questions/42887