DMV获取索引配置信息

时间:2015-11-10 18:17:42

标签: sql sql-server indexing

我想检查数据库中的所有表是否都有关于哪种类型的列的聚簇索引(例如:int)以及聚簇索引是否在单/多列上。我无法确定哪些DMV或视图可以检索此信息。请帮忙。

3 个答案:

答案 0 :(得分:1)

下面的sql将为您提供集群索引和表名的列表,其中包含更多详细信息。你可以修改它来得到你的结果。

SELECT 'ClusteredIndexName' = SI.Name, 
       'TableName' = SO.Name, 
       'ColumCount' = IK.IndexColumnCount,
       'IsUnique' = CASE WHEN SI.is_unique = 0 THEN 'N' ELSE 'Y' END
       ,SI.type_desc
FROM SYS.INDEXES SI                 

JOIN SYS.OBJECTS SO                 -- Joining on SYS.OBJECTS to get the TableName
  ON SO.OBJECT_ID = SI.Object_ID

JOIN (                              -- Joining on a Derived view to work out how many columns exist on the clustered index 
        SELECT 'IndexColumnCount' = MAX(KEY_ORDINAL), OBJECT_ID, index_id
        FROM SYS.INDEX_COLUMNS
        GROUP BY OBJECT_ID, index_id       
     )  AS IK                       
  ON IK.object_id = SI.Object_ID
 AND IK.index_id = SI.index_id  

WHERE SI.type_desc = 'CLUSTERED'    and                 
   SI.OBJECT_ID NOT IN (SELECT OBJECT_ID 
               FROM SYS.ALL_OBJECTS
               WHERE TYPE = 'S')        -- Not system tables
  AND SO.Type = 'U'
  AND SO.is_ms_shipped = 0  

答案 1 :(得分:0)

使用Sql Server Management Studio可以查看表中所有索引的定义。在Tables文件夹中找到该表,展开并展开Indexes。选择特定索引上的“属性”以查看列和其他属性。

答案 2 :(得分:0)

SELECT * FROM sys.indexes(我想,自从我使用SQL Server以来已经有一段时间了。)