【问题标题】:Translate index_id to the name of the index将 index_id 翻译为索引的名称
【发布时间】:2011-08-13 10:28:01
【问题描述】:

系统函数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 转换为索引的名称?

【问题讨论】:

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


    【解决方案1】:

    与其在没有数据库参数集的情况下使用sys.dm_db_index_physical_stats,不如循环访问从 sys.databases 拉入临时表的数据库列表,然后使用特定数据库查询索引统计信息。关于这个话题有一个extensive script posted here

    【讨论】:

    • 虽然这可能是解决问题的宝贵提示,但答案确实需要证明解决方案。请edit 提供示例代码来说明您的意思。或者,请考虑将其写为评论。
    • 答案链接现已损坏,并且在没有上下文的情况下引用了 Toad 的博客。
    【解决方案2】:

    系统视图dm_db_index_physical_stats 包含一个列object_id。这是sysobjects 表中对象(表)的 ID。因此,您可以简单地查找它:

    SELECT name FROM sys.sysobjects WHERE id = 'add object id here'
    

    name 将是表名。显然,这也可以变成INNER JOIN 以防止额外调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多