提高sys.dm_db_index_physical_stats的性能
在维护工作期间,我正在尝试获取碎片索引的列表。但是查询非常慢,需要30多分钟才能执行。我认为这是由于对sys.dm_db_index_physical_stats进行的远程扫描。 有什么方法可以加快以下查询的速度: SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC 我不是DBA,可能在上面的查询中犯了一个明显的错误,或者也许有些索引或统计信息会有所帮助?也许只是数据库的大小(大约20Gb,大约140个表)。 我问的原因是,我们在夜间只有一个很小的维护窗口,这在大多数时候都占用了。