SQL server查看各表的索引

文章介绍了如何使用SQL语句查询SQLServer数据库中的索引,包括单表所有索引和多表指定索引的信息,如表名、索引名、类型、唯一性及包含的列名,有助于进行性能优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、要查看 SQL Server 数据库中的索引,可以使用如下 SQL 语句:

SELECT

    TableName = t.name,

    IndexName = ind.name,

    ind.type_desc,

    ind.is_unique,

    ind.is_primary_key,

    ColumnNames =

        stuff(

            (

                select ', ' + col.name +

                case when ic.is_descending_key = 1 then ' desc' else '' end

                from sys.index_columns ic

                    inner join sys.columns col on ic.object_id = col.object_id and ic.column_id = col.column_id

                where

                    ic.object_id = ind.object_id

                    and ic.index_id = ind.index_id

                order by

                    ic.index_column_id

                for xml path ('')

            ),1,2,''

        )

FROM

    sys.indexes ind

    INNER JOIN sys.tables t ON ind.object_id = t.object_id

    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id

WHERE

    ind.name IS NOT NULL

ORDER BY

    t.name, ind.name;

这条 SQL 语句查询了系统元数据表,包含了以下信息:

- 表名

- 索引名

- 索引类型(聚集索引或非聚集索引)

- 是否是唯一索引

- 是否是主键索引

- 索引包含的列名

执行上述 SQL 语句,将返回数据库中所有表的所有索引,并列出了每个索引的详细信息,包括列名、类型、是否唯一和主键等信息。可以根据这些信息来进行索引的优化和调整,以提高查询性能。

2、要查看 SQL Server 数据库中指定的多个表上的索引,可以使用如下 SQL 语句:

SELECT

    TableName = t.name,

    IndexName = ind.name,

    ind.type_desc,

    ind.is_unique,

    ind.is_primary_key,

    ColumnNames =

        stuff(

            (

                SELECT ', ' + col.name +

                CASE WHEN ic.is_descending_key = 1 THEN ' desc' ELSE '' END

                FROM sys.index_columns ic

                    INNER JOIN sys.columns col ON ic.object_id = col.object_id AND ic.column_id = col.column_id

                WHERE

                    ic.object_id = ind.object_id

                    AND ic.index_id = ind.index_id

                ORDER BY

                    ic.index_column_id

                FOR XML PATH ('')

            ),1,2,''

        )

FROM

    sys.indexes ind

    INNER JOIN sys.tables t ON ind.object_id = t.object_id

    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id

WHERE

    t.name IN ('Table1', 'Table2', 'Table3') -- 替换成你要查询的多个表名,用逗号分隔

ORDER BY

    t.name, ind.name;

将上述 SQL 语句中的 `IN ('Table1', 'Table2', 'Table3')` 替换为你要查询的多个表名,并根据需要修改其他查询条件。执行该 SQL 语句将返回指定表上的所有索引,并列出每个索引的详细信息,包括索引名、类型、是否唯一和主键等信息。

注意:确保将表名作为字符串按正确的语法提供给 `IN` 表达式,并在 SQL 查询中使用正确的数据库上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值