我是数据库的新手,正在寻找一种方法来查找服务器上的所有碎片索引,而不必单独浏览每个数据库。
答案 0 :(得分: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's free maintenance solution,Michelle Ufford (SQLFool)'s free defrag script和我们的新SQL Sentry Fragmentation Manager。
免责声明:我为SQL Sentry工作。