谷歌search出现了一些脚本,这些脚本对系统表运行查询,并依次轮换重新构build(或者重新组织)每个数据库表索引。 这似乎是合理的,但他在这里问我这个问题的原因是,从一个未知来源查询系统表的SQL脚本让我感到紧张,例如,它可能会错过某些types的索引或尝试重build应该独立的特殊系统索引。 碰巧,我尝试的第一对夫妇没有工作,因为他们没有处理不同模式的表。
那么,对于SQL Server 2005数据库的所有表重build所有索引的最好和最简单的方法是什么共识呢?
谢谢。
如果您不想冒第三方脚本的风险,则本地维护计划包括为每个数据库重新构build所有索引的选项。
奥拉哈雷格伦有一个成熟的写得很好的索引优化脚本索引,我可以强烈推荐。 它使用SQL Server 2005 ALTER INDEX REBUILD / REORGANIZE语法,允许在线重buildEnterprise。
像往常一样,BOL有一个很好的起点,解释它是如何做的以及你可以改变什么以使它有不同的效果。 http://msdn.microsoft.com/en-us/library/ms177571.aspx 。 我开始使用这个脚本并添加到这个脚本中,以便处理所有的数据库(在某些服务器上)。 我还为@maxfrag设置了一个不同的值,取决于scrpt的运行时间 – 周末会得到一个较低的值,周末会得到一个较高的值,以及是否有重build或重组。 这确保了作业在我们的时间限制内运行,并且数据库不会有大的locking
这全部基于您可以在脚本中指定的索引碎片阈值。
确实非常有用,非常有用! 你可以简单地configuration这个脚本,然后在你所有的数据库上运行它。
渣子
不像其他答复中提到的sqlfool脚本那样完整/复杂,但是我使用:
DECLARE @sSQL NVARCHAR(1024), @sName NVARCHAR(1024) DECLARE curTables CURSOR FOR SELECT name FROM sysobjects WHERE xtype='U' OPEN curTables FETCH NEXT FROM curTables INTO @sName WHILE @@fetch_status = 0 BEGIN SET @sSQL = 'DBCC DBREINDEX ('''+@sName+''', '''', 0)' EXEC (@sSQL) FETCH NEXT FROM curTables INTO @sName END CLOSE curTables DEALLOCATE curTables
重build当前login到的数据库中的所有索引。