sql-server – 如何使用MSSQL,重建所有表上的所有索引? MSSQL S
发布时间:2020-12-12 05:55:13 所属栏目:MsSql教程 来源:网络整理
导读:我有一个mssql数据库,我们称之为:mssqlDB01.我的任务是在所有表上执行碎片整理.此数据库有几百个表,每个表的每个表的范围为1到15个索引. Google让我发现了一种对每个表的所有索引进行碎片整理的做法,但我无法弄清楚如何在所有表上进行碎片整理. ALTER INDEX
我有一个mssql数据库,我们称之为:mssqlDB01.我的任务是在所有表上执行碎片整理.此数据库有几百个表,每个表的每个表的范围为1到15个索引.
Google让我发现了一种对每个表的所有索引进行碎片整理的做法,但我无法弄清楚如何在所有表上进行碎片整理. 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’s是最知名和免费的,但 Minion Ware also has a free reindex script.如果你坚持自己写,这样的东西可能会起作用: Use mssqlDB01 Declare @TBname nvarchar(255),@SQL nvarchar(max) select @TBname = min(TABLE_NAME) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' while @TBname is not null BEGIN set @SQL='ALTER INDEX ALL ON [' + @TBname + '] REBUILD;' --print @SQL EXEC SP_EXECUTESQL @SQL select @TBname = min(TABLE_NAME) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' and TABLE_NAME > @TBname END (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |