系统函数sys.dm_db_index_physical_stats
返回服务器上所有索引的碎片。而不是名称,它返回表和索引的id
。可以使用db_name
,object_schema_name
和object_name
找到数据库,架构和对象的名称:
select db_name(ips.database_id)
, object_schema_name(ips.object_id, ips.database_id)
, object_name(ips.object_id, ips.database_id)
, ips.index_id
, ips.avg_fragmentation_in_percent
from sys.dm_db_index_physical_stats(null, null, null, null, null) ips
函数object_name
不适用于索引。与sys.indexes
的连接有效,但它是特定于数据库的,因此您必须在带有动态SQL的游标中运行它。
有没有更好的方法将index_id
翻译成索引名称?
答案 0 :(得分:0)
为什么不在没有数据库参数集的情况下使用sys.dm_db_index_physical_stats
,为什么不循环从sys.databases中拉入临时表的数据库列表,然后查询具有特定数据库的索引统计信息。这个主题有一个extensive script posted here。
答案 1 :(得分:-1)
系统视图dm_db_index_physical_stats
包含一列object_id
。这是sysobjects
表中对象(表)的id。因此,您可以简单地查找它:
SELECT name FROM sys.sysobjects WHERE id = 'add object id here'
name
将是表名。显然,这也可以变成INNER JOIN
以防止额外的呼叫。