目前我們的數據庫大小爲10 GB,每月增長大約3 GB。我經常聽到應該不時重建索引,以改善查詢執行時間。那麼我應該多長時間一次重建給定場景中的索引?索引應該在我們的SQL Server數據庫中重建多久?
回答
還有,你應該重新組織儘快索引碎片達到超過5(有時是10%)(「碎片整理」),你的指數普遍的共識,完全當它超越了30%,你應該重建它們(至少這是我在很多地方所倡導的數字)。
Michelle Ufford(又名「SQL傻瓜」)有一個automated index defrag script,它使用這些確切的限制來決定何時重新組織或重建索引。
另請參閱Brad McGehee's tips on rebuild indexes有關如何處理索引重建的一些很好的想法和提示。
我在這裏使用這個腳本(不記得,當我得到這個從 - 不管是誰:非常感謝真正有用的東西!)對給定數據庫中所有的指標顯示索引碎片:
SELECT
t.NAME 'Table name',
i.NAME 'Index name',
ips.index_type_desc,
ips.alloc_unit_type_desc,
ips.index_depth,
ips.index_level,
ips.avg_fragmentation_in_percent,
ips.fragment_count,
ips.avg_fragment_size_in_pages,
ips.page_count,
ips.avg_page_space_used_in_percent,
ips.record_count,
ips.ghost_record_count,
ips.Version_ghost_record_count,
ips.min_record_size_in_bytes,
ips.max_record_size_in_bytes,
ips.avg_record_size_in_bytes,
ips.forwarded_record_count
FROM
sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips
INNER JOIN
sys.tables t ON ips.OBJECT_ID = t.Object_ID
INNER JOIN
sys.indexes i ON ips.index_id = i.index_id AND ips.OBJECT_ID = i.object_id
WHERE
AVG_FRAGMENTATION_IN_PERCENT > 0.0
ORDER BY
AVG_FRAGMENTATION_IN_PERCENT, fragment_count
鑑於數據庫的大小,您可以輕鬆地每月重建索引一次。但隨着規模的增加,比如說500GB左右,你可以每月做兩次。
當然,取決於未完成交易的數量,類型和生存期。這可能是一個非常活躍的10GB數據庫。 – NTDLS 2010-02-16 19:29:47
「當你需要」和「當你可以」!
例如...
試驗碎片第一,並決定是否什麼也不做,REORG或重建。 SQL Fool's script does this,例如,有
每天@minFragmentation
和@rebuildThreshold
參數進行統計,比如說,但指數在週末。你的維護窗口是什麼?
您應該經常重建索引,以免產品受到索引降級的不利影響。我知道這看起來很模糊,但所有的數據庫都不同,並且以不同的方式使用。您只需定期重建/整理引起寫操作(插入/更新)的索引 - 您的靜態或主要只讀表不需要太多重新索引。
您將需要使用dbcc showcontig([Table])
來檢查索引的碎片級別,確定它們多久出現碎片以及碎片實際存在的級別。
使用dbcc dbreindex([Table])
完全重建索引,當它們變得過於分散時(超過20%-30%左右),但如果找不到足夠大的停機時間並且碎片級別相對較低(1%-25%) ,您應該使用dbcc indexdefrag([Database], [Table], [Index])
在「在線」活動中對索引進行碎片整理。另外請記住,您可以停止索引碎片整理操作,並在稍後再次啓動而不會丟失任何工作。保持數據庫及其索引「合理」需要一點監控才能真正感受何時以及要重新索引什麼。
你不會在SQL Server 2005+中使用這3個DBCC命令中的任何一個 – gbn 2010-02-17 04:36:13
我承認,學校的SQL人。請留下一些細節....啓發我。 – NTDLS 2010-02-17 05:05:11
因爲它們從SQL Server 2005開始被標記爲已棄用,並且將在未來的版本中刪除。以下是提及此的2個網址:http://weblogs.sqlteam.com/tarad/archive/2007/02/26/60121.aspx&http://www.mssqltips.com/tip.asp?tip=1352和這裏是智慧的官方詞彙:http://msdn.microsoft.com/en-us/library/ms143729.aspx – 2010-02-17 08:40:24
- 1. SQL Server 2005 - 應該多長時間重建索引?
- 2. 我們可以在索引數據庫中創建多少個索引?
- 3. 我應該使用多對多數據庫表的索引嗎?
- 4. 我應該創建單獨的SQL Server數據庫嗎?
- 5. 什麼時候應該重建數據庫索引?
- 6. 我應該多久重建一次我的App Engine搜索索引(全文搜索)?
- 7. 我們應該在數據庫中做多少工作?
- 8. 從數據庫檢索數據和批量索引他們 - SQL Server
- 9. 當在SQL Server重建索引2008
- 10. 在sql server上重建索引
- 11. 在SQL Server數據庫上創建Lucene索引
- 12. SQL Server索引重建與重組
- 13. 應該索引多少個字段,我應該如何創建它們?
- 14. 在SQL Server Management Studio中更改SQL Server數據庫中的列索引
- 15. 我應該多久檢索一次?
- 16. 我們應該在數據庫中存儲數據嗎?
- 17. 重新構建SQL Server全文索引
- 18. SQL Server 2005收縮和重建索引
- 19. sql server刪除列重建索引?
- 20. 我不能在我的數據庫sql server中創建關係
- 21. 在SQL Server 2008中,我應該如何將數據庫中的數據複製到另一個數據庫?
- 22. 我是否需要重建我的SQL服務器數據庫索引?
- 23. SQL Server 2008:我應該在「短語」列上創建全文索引
- 24. 將數據庫從SQL Server 2000升級到2005 - 並重建全文索引?
- 25. 在Sql Server維護計劃中重組索引與重建索引
- 26. 我們是否也應該在視圖上創建索引以提高SQL Server的性能?
- 27. 在SQL Server中創建數據庫
- 28. 在SQL Server中創建數據庫
- 29. 在SQL Server 2005中創建數據庫
- 30. 在其列,我應該創建索引
布拉德麥吉的提示鏈接被打破。也許這是正確的鏈接,http://www.sql-server-performance.com/2007/rebuilding-indexes/ – 2017-08-31 16:14:40