You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL Server 2016中获取所有ONLINE=ON的索引列表?

获取ONLINE状态索引列表的正确方法

嘿,sys.tables可帮不上这个忙哦——它只存储表本身的元数据,完全不包含索引的状态信息。你之前查sys.indexes是找对方向了,只是可能没找对对应的列而已!

在SQL Server中,索引的在线状态信息是存在sys.indexes视图里的,具体看state_desc列:当该列的值为'ONLINE'时,就表示这个索引处于在线可用状态。

你可以用下面的查询语句来获取所有在线的索引列表,同时关联表名方便查看:

SELECT
    t.name AS 表名,
    i.name AS 索引名,
    i.type_desc AS 索引类型,
    i.state_desc AS 索引状态
FROM
    sys.indexes i
INNER JOIN
    sys.tables t ON i.object_id = t.object_id
WHERE
    i.state_desc = 'ONLINE'
    AND i.type <> 0; -- 排除堆表(type=0代表堆,堆没有索引)

补充说明:

  • 如果你的需求是找创建/重建时使用了ONLINE=ON选项的索引,那很遗憾,这个操作参数不会被持久化存储在系统视图里,没法直接查询。这种情况下你只能通过查看历史DDL操作记录(比如事务日志、扩展事件或者版本控制系统里的脚本)来确认。
  • sys.index_columns只存储索引和列的关联关系,确实不包含状态信息,所以之前查它找不到是正常的。

内容的提问来源于stack exchange,提问作者Ramkumar Sambandam

火山引擎 最新活动