如何从SQL Server 2005中的IndexId获取索引名称

DHo*_*out 19 sql-server sql-server-2005

我正在运行以下查询来列出索引的大小和碎片:

SELECT object_name(object_id, database_id) as objectname), index_id, *
FROM sys.dm_db_index_usage_stats
Run Code Online (Sandbox Code Playgroud)

是否有可用于转换index_id为索引名称的SQL函数?

Esp*_*spo 22

我在这个页面上找到了一个可以帮助你的功能:

CREATE FUNCTION dbo.index_name (@object_id int, @index_id int)
RETURNS sysname
AS
BEGIN
  RETURN(SELECT name FROM sys.indexes WHERE object_id = @object_id and index_id = @index_id)
END; 
Run Code Online (Sandbox Code Playgroud)

  • 或者,只需采用此逻辑并将其添加为原始查询的连接 (8认同)
  • 请注意,sys.indexes是特定于数据库的.在上面的问题中,用户显示对sys.dm_db_index_usage_stats的查询,并在OBJECT_NAME函数中指定database_id.此函数仅返回当前打开的数据库的结果. (6认同)

poa*_*ter 10

或者更好的是:

SELECT  OBJECT_NAME(d.object_id, d.database_id) AS objectname ,
        d.index_id ,
        i.name ,
        *
FROM    sys.dm_db_index_usage_stats AS d
        LEFT OUTER JOIN sys.indexes AS i ON i.object_id = d.object_id
                                            AND i.index_id = d.index_id
Run Code Online (Sandbox Code Playgroud)