SQL SERVER获取某张表创建的索引

 1 --方案一
 2 SELECT 
 3   表名 = c.name,
 4   索引类型 = CASE a.indid WHEN 1 THEN '聚集索引' ELSE '非聚集索引' END,
 5   索引名称 = ISNULL(a.name, '无索引名'),
 6   索引字段名 = d.name,
 7   索引字段位置 = b.keyno,
 8   字段类型 = CASE WHEN b.keyno > 0 THEN '索引键列' ELSE '包含性列(INCLUDE)' END
 9 FROM sysindexes a
10 INNER JOIN sysindexkeys b ON a.id = b.id AND a.indid = b.indid
11 INNER JOIN sysobjects c ON a.id = c.id 
12 INNER JOIN syscolumns d ON a.id = d.id AND b.colid = d.colid
13 WHERE a.indid NOT IN (0,255)  -- 排除堆表、系统隐藏索引
14   AND c.xtype = 'U'           -- 只查用户业务表,排除系统表/视图
15 AND c.name='tableName' --你的表名称
16 ORDER BY c.name,a.name,d.name ASC
17 
18 --方案二
19 WITH tbl
20 AS (
21     SELECT A.index_id, A.object_id, B.name
22     FROM   sys.index_columns A
23     INNER JOIN sys.columns B ON A.column_id=B.column_id AND A.object_id=B.object_id
24 )
25 
26 SELECT A.name AS TableName, B.name AS IndexName, B.rows, C.columnname AS ColumnName
27 FROM sys.tables AS A
28 INNER JOIN sysindexes B ON A.object_id=B.id
29 INNER JOIN (
30     SELECT   index_id, object_id, (
31     SELECT name+','
32     FROM   tbl
33     WHERE  tbl.index_id=A.index_id AND tbl.object_id=A.object_id
34     FOR XML PATH('')
35     ) AS columnname
36     FROM     tbl A
37     GROUP BY index_id, object_id
38 ) C ON A.object_id=C.object_id AND B.indid=C.index_id
39 WHERE    B.groupid=1
40 --查询某个表的索引
41 AND A.name='表名称'
42 --包含某个字段名
43 and  C.columnname  like '%字段名%'
44 ORDER BY B.rows DESC,A.name,b.name,b.indid ASC

 

posted @ 2020-07-23 09:46  常威打来福  阅读(475)  评论(0)    收藏  举报