将index_id转换为索引的名称

时间:2011-08-13 10:28:01

标签: sql sql-server sql-server-2005

系统函数sys.dm_db_index_physical_stats返回服务器上所有索引的碎片。而不是名称,它返回表和索引的id。可以使用db_nameobject_schema_nameobject_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翻译成索引名称?

2 个答案:

答案 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以防止额外的呼叫。