sys.sysindexes (Transact-SQL)

当前数据库中的每个索引和表在表中各对应一行。此视图不支持 XML 索引。此视图不完全支持分区表和索引;请改用 sys.indexes 目录视图。

重要说明重要提示

将此 SQL Server 2000 系统表作为一个视图包含进来是为了保持向后兼容性。建议您改用最新的 SQL Server 系统视图。若要查找一个或多个等效系统视图,请参阅将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

列名

数据类型

说明

id

int

索引所属表的 ID。

status

int

系统状态信息。

标识为仅供参考。不提供支持。不保证以后的兼容性。

first

binary(6)

指向第一页或根页的指针。

indid = 0 时不使用。

NULL = 当 indid > 1 时,对索引进行分区。

NULL = 当 indid 为 0 或 1 时,对表进行分区。

indid

smallint

索引 ID:

0 = 堆

1 = 聚集索引

> 1 = 非聚集索引

root

binary(6)

如果 indid >= 1,root 是指向根页的指针。

indid = 0 时不使用。

NULL = 当 indid > 1 时,对索引进行分区。

NULL = 当 indid 为 0 或 1 时,对表进行分区。

minlen

smallint

行的最小大小。

keycnt

smallint

键数。

groupid

smallint

在其上创建对象的文件组 ID。

NULL = 当 indid > 1 时,对索引进行分区。

NULL = 当 indid 为 0 或 1 时,对表进行分区。

dpages

int

如果 indid = 0 或 indid = 1,dpages 是已用数据页的计数。

如果 indid > 1,dpages 是已用索引页的计数。

0 = 当 indid > 1 时,对索引进行分区。

0 = 当 indid 为 0 或 1 时,对表进行分区。

如果发生行溢出,则不会得出准确的结果。

reserved

int

如果 indid = 0 或 indid = 1,reserved 是分配给所有索引和表数据的页计数。

如果 indid > 1,reserved 是分配给索引的页计数。

0 = 当 indid > 1 时,对索引进行分区。

0 = 当 indid 为 0 或 1 时,对表进行分区。

如果发生行溢出,则不会得出准确的结果。

used

int

如果 indid = 0 或 indid = 1,used 是用于所有索引和表数据的总页数。

如果 indid > 1,used 是用于索引的页计数。

0 = 当 indid > 1 时,对索引进行分区。

0 = 当 indid 为 0 或 1 时,对表进行分区。

如果发生行溢出,则不会得出准确的结果。

rowcnt

bigint

基于 indid = 0 和 indid = 1 的数据级行计数。

0 = 当 indid > 1 时,对索引进行分区。

0 = 当 indid 为 0 或 1 时,对表进行分区。

rowmodctr

int

对自上次更新表的统计信息后插入、删除或更新行的总数进行计数。

0 = 当 indid > 1 时,对索引进行分区。

0 = 当 indid 为 0 或 1 时,对表进行分区。

在 SQL Server 2005 及更高版本中,rowmodctr 与早期版本不完全兼容。有关详细信息,请参阅“备注”。

xmaxlen

smallint

最大行大小

maxirow

smallint

最大非叶索引行大小。

在 SQL Server 2005 及更高版本中,maxirow 与早期版本不完全兼容。

OrigFillFactor

tinyint

创建索引时使用的初始填充因子值。不保留该值;但如果需要重新创建索引但不记得当初使用的填充因子,则该值可能很有帮助。

StatVersion

tinyint

返回 0。

标识为仅供参考。不提供支持。不保证以后的兼容性。

reserved2

int

返回 0。

标识为仅供参考。不提供支持。不保证以后的兼容性。

FirstIAM

binary(6)

NULL = 索引已分区。

标识为仅供参考。不提供支持。不保证以后的兼容性。

impid

smallint

索引实现标志。

返回 0。

标识为仅供参考。不提供支持。不保证以后的兼容性。

lockflags

smallint

用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以最大限度地降低锁定成本。

pgmodctr

int

返回 0。

标识为仅供参考。不提供支持。不保证以后的兼容性。

keys

varbinary(816)

组成索引键的列 ID 列表。

返回 NULL。

若要显示索引键列,请使用 sys.sysindexkeys

name

sysname

索引或统计信息的名称。当 indid = 0 时返回 NULL。修改应用程序以查找 NULL 堆名。

statblob

image

统计信息二进制大型对象 (BLOB)。

返回 NULL。

maxlen

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

rows

int

基于 indid = 0 和 indid = 1 的数据级行计数,如果 indid >1,则该值包含重复的计数。

注释

不得使用定义为保留的列。

在 SQL Server 的早期版本中,每个至少包含一个 text、ntext 或 image 列的表在 sysindexes 中也有一个 indid = 255 的行。此索引 ID 不再存在。当表或索引具有一个或多个大型对象 (LOB) 数据类型时,将为每个分区分配一个 LOB_DATA 分配单元来管理数据存储。有关详细信息,请参阅表组织和索引组织

如果表或索引在 ROW_OVERFLOW 分配单元中包含数据,则 dpagesreservedused 列将不返回准确的结果。此外,将单独跟踪每个索引的页计数,并且不对基表的页计数进行聚合。若要查看页计数,请使用 sys.allocation_unitssys.partitions 目录视图或 sys.dm_db_partition_stats 动态管理视图。

在早期版本的 SQL Server 中,数据库引擎维护行级修改计数器。现在,此类计数器在列级维护。因此,将计算 rowmodctr 列并生成与早期版本中的结果类似的结果,但这两个结果不完全相同。

如果使用 rowmodctr 中的值确定更新统计信息的时间,请考虑下列解决方案:

  • 不执行任何操作。新 rowmodctr 值通常可帮助您确定更新统计信息的时间,因为该行为与早期版本的结果相当接近。

  • 使用 AUTO_UPDATE_STATISTICS。有关详细信息,请参阅使用统计信息提高查询性能

  • 使用时间限制确定更新统计信息的时间。例如,每小时、每天或每周。

  • 使用应用程序级信息确定更新统计信息的时间。例如,每次将 identity 列的最大值更改 10,000 以上或每次执行大容量插入操作时。