我是数据库新手,正在寻找一种方法来查找服务器上的所有碎片索引,而不必分别浏览每个数据库。
问问题
1941 次
1 回答
1
一种方法是在循环中构建命令:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += '
UNION ALL
SELECT db = ''' + name + ''', *
FROM sys.dm_db_index_physical_stats(' + RTRIM(database_id)
+ ', NULL, NULL, NULL, ''SAMPLED'') -- WHERE ...'
FROM sys.databases WHERE database_id > 4;
SET @sql = STUFF(@sql,1,14,'');
EXEC sp_executesql @sql;
但是你对输出做了什么?有更好的解决方案可以为您自动执行此操作。例如,Ola Hallengren 的免费维护解决方案、Michelle Ufford (SQLFool) 的免费碎片整理脚本,以及我们新的SQL Sentry Fragmentation Manager。
免责声明:我为 SQL Sentry 工作。
于 2012-07-25T12:51:40.073 回答