我有一个 mssql 数据库,我们称之为:mssqlDB01。我的任务是对所有表执行碎片整理。这个数据库有几百个表,每个表的每个表都有 1 到 15 个索引。
谷歌让我发现了一种对每个表的所有索引进行碎片整理的做法,但我不知道如何在所有表上执行此操作。
ALTER INDEX ALL ON TABLENAME REBUILD;
我要找的是
ALTER INDEX ALL ON * REBUILD;
但它抱怨
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '*'.`
下面让我找到我的数据库中的所有表
SELECT * FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'
我可以以某种方式将其推送到命令中吗?
ALTER INDEX ALL ON (SELECT * FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'; ) REBUILD;
您可能可以编写一个使用动态 SQL 的脚本来执行此操作,但是当您可以使用其他人的时为什么要这样做呢? Ola Hallengren最出名且免费,但Minion Ware 也有一个免费的重新索引脚本。
如果你坚持自己写,这样的事情可能会奏效:
运行此查询:
复制输出并将其粘贴到 SQL 窗口中,然后单击运行。
以@Firdaus 为基础,简单而简单的答案:
如果您的数据库有模式,请尝试在 SSMS 中运行以下命令:
通常,DBA 会创建一个自动化函数或拥有重建索引的工具。
这是一个功能版本,用于重建架构中所有表的所有索引:
这将重建索引并保留压缩设置(如果有):