我正在尝试减少SQL Server 2005上运行的数据库的所有索引的碎片。
当前,我正尝试将alter index与sp_msforeachtable结合使用,以将其应用于所有表的所有索引:
sp_MSforeachtable "ALTER INDEX ALL ON ? REBUILD;"
但出于某种原因,这似乎并不总是奏效?
如果我尝试使用一个索引,或者一个表的所有索引,那么碎片就会被清除,只是当我将它应用到整个数据库时,似乎会遇到问题。
以前我可能使用过dbcc dbreindex,但是bol声明它将在下一个版本的sql server中被删除,所以我不想使用它。
有谁能就清理数据库中所有索引的最佳方法给我一些建议吗?
谢谢
最佳答案
如果您想完全自动化SQL Server索引维护,那么我郑重建议您查看Michelle Ufford的存储过程。
Index Defrag Script V4.1
这是我所读过的最好的索引维护脚本。
此脚本的最佳功能之一是,您可以自定义使用的阈值,以确定是否重建或重新组织给定的索引结构。
它还提供了限制过程使用的CPU核心数的选项。如果要在繁忙的实时生产数据库上运行脚本,这是一个很好的选择。
警告:与所有Internet可用代码一样,请确保在生产环境中使用前对其进行彻底测试。你也很可能希望结合你自己的定制和功能。