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