重建索引的最佳方法

Iai*_*ult 2 sql database sql-server sql-server-2005

我正在尝试减少在SQL Server 2005上运行的数据库的所有索引中的碎片.目前我正在尝试将ALTER INDEX与sp_MSforeachtable一起使用,以将其应用于所有表的所有索引:

sp_MSforeachtable "ALTER INDEX ALL ON ? REBUILD;"
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,这似乎并不总是有用吗?如果我尝试单个索引或单个表的所有索引,那么碎片就会被清理掉,这似乎就是当我将它应用到整个数据库时我遇到了问题.

以前我可能使用过DBCC DBREINDEX,但BOL声明它将在下一版本的SQL Server中删除,所以我不想使用它.

任何人都可以就解决清理数据库中所有索引的最佳方法给出任何建议吗?

谢谢

Joh*_*som 5

如果您想完全自动化SQL Server索引维护,那么我认真地建议您查看Michelle Ufford的存储过程.

索引碎片整理脚本V4.1

这是我认为是我读过的最好的索引维护脚本.

此脚本的最佳功能之一是您可以自定义您使用的阈值,以确定是否重建或重新组合给定的索引结构.

它还提供了限制过程使用的CPU核心数的选项.如果您打算在繁忙的实时生产数据库上运行脚本,这是一个很好的选择.

警告:与所有互联网可用代码一样,在生产环境中使用之前,请确保彻底测试.您也很可能也想要合并自己的自定义和功能.