Sql-Server
刪除和重新創建索引
我最常遇到的情況是,使用者將那裡的數據庫從一台伺服器移動到另一台伺服器,並且在他們移動後立即面臨性能問題(緩慢)。
我設法重建索引或重新組織它們,並更新統計資訊,這沒什麼用。
刪除並重新創建索引,然後更新統計資訊會有幫助嗎?
一些注意事項:
- 重建索引後,不要更新所有統計資訊!
- 重建索引,不要重組
無論如何,索引重建都會重建統計資訊。進一步的更新實際上意味著由於採樣率的原因,您的統計數據會更差。您可以重建列統計資訊。
此外,值得比較伺服器規格(RAM、CPU、磁碟)和查詢計劃 XML。第二台伺服器是否有不同的連接選項,比如不同的 ARITHABORT 設置?
最後,進行比較(例如使用 Red Gate SQL 比較),但請確保您比較所有內容:統計數據、填充因子、批次。
索引碎片和統計資訊並不是導致性能問題的唯一可能原因。除了這個重建和重組是不同的過程。
- INDEX REBUILD:刪除現有索引並重新創建索引。可以線上或離線完成。
- INDEX REORGANIZATION:它在物理上重新組織索引的葉節點。它始終線上。
選擇哪一個?當索引碎片大於 30% 時,應該重建索引。當索引碎片在 5% 到 30% 之間時,應該重新組織索引。索引重建過程使用更多 CPU 並鎖定數據庫資源。ONLINE 選項僅適用於 SQL Server 開發企業版。如果沒有 ONLINE 子句,索引會被簡單地刪除並重新創建。考慮到由於大量碎片,優化器可能會改變自己使用索引的偏好。建議定期檢查索引碎片級別。