0

我是数据库新手,正在寻找一种方法来查找服务器上的所有碎片索引,而不必分别浏览每个数据库。

4

1 回答 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 回答