SQLSERVER查出数据库的全部索引
:SQLSERVER查出数据库的全部索引
假设要查询 SQL Server 中数据库 a 的全部索引,可以使用系统视图 sys.indexes 结合 sys.tables 和 sys.schemas 来获取。以下是两种常用方法:
USE a; -- 切换到目标数据库 SELECT SCHEMA_NAME(t.schema_id) AS 架构名, t.name AS 表名, i.name AS 索引名, i.type_desc AS 索引类型, i.is_unique AS 是否唯一, i.is_primary_key AS 是否主键, i.fill_factor AS 填充因子 FROM sys.tables t INNER JOIN sys.indexes i ON t.object_id = i.object_id WHERE i.type IN (1,2) -- 1=聚集索引,2=非聚集索引(如需包含堆,去掉此条件) ORDER BY 架构名, 表名, 索引名;
如果不加 i.type 过滤,会包含堆(无索引的表)记录(type = 0)。
若要查看所有索引(包括 XML、空间等),可去掉 WHERE 条件。
sp_helpindex针对单个表查询索引,但不适合一次性列出所有表:
USE a; EXEC sp_helpindex '表名'; -- 需逐一执行
如果不想切换数据库,可以使用完全限定名:
SELECT SCHEMA_NAME(t.schema_id) AS 架构名, t.name AS 表名, i.name AS 索引名, i.type_desc AS 索引类型 FROM a.sys.tables t INNER JOIN a.sys.indexes i ON t.object_id = i.object_id WHERE i.type IN (1,2);
以上查询会列出数据库 a 中所有用户表的索引信息。如需包含系统表,可改用 sys.all_objects 或 sys.objects 且 type='U' 仅限用户表。