sys.sysindexes (Transact-SQL)

更新日期: 2005 年 12 月 5 日

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

ms190283.note(zh-cn,SQL.90).gif重要提示:
包含此 SQL Server 2000 系统表体现了向后兼容性。建议您改用当前的 SQL Server 系统视图。若要查找等效系统视图,请参阅将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。
列名 数据类型 说明

id

int

索引所属表的 ID。

status

int

内部系统状态信息。

first

binary(6)

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

在 SQL Server 6.5 版及更早版本中,sysindexes.first 始终指向堆的起点、索引叶级的起点或者 textimage 页链的起点。

在 SQL Server 7.0 版及更高版本中,当 indid = 0 时不使用 sysindexes.first

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

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

indid

smallint

索引 ID:

0 = 堆

1 = 聚集索引

> 1 = 非聚集索引

root

binary(6)

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

在 SQL Server 6.5 版及更早版本中,当 indid = 0 时,sysindexes.root 指向堆中的最后一页。

在 SQL Server 7.0 版及更高版本中,当 indid = 0 时不使用 sysindexes.root

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 (Transact-SQL)

name

sysname

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

statblob

image

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

返回 NULL。

maxlen

int

标识只是为了提供一些信息。不提供支持。不保证以后的兼容性。

rows

int

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

备注

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

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

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

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

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

  • 不执行任何操作。新 rowmodctr 值通常可帮助您确定更新统计信息的时间,因为该行为与早期版本的结果相当接近。
  • 使用 AUTO_UPDATE_STATISTICS。有关详细信息,请参阅索引统计信息
  • 使用时间限制确定更新统计信息的时间。例如,每小时、每天或每周。
  • 使用应用程序级信息确定更新统计信息的时间。例如,每次将 identity 列的最大值更改 10,000 以上或每次执行大容量插入操作时。

请参阅

参考

目录视图 (Transact-SQL)
将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图
sys.indexes (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2005 年 12 月 5 日

更改的内容:
  • 对于列 dpagesreservedusedrowcntrowmodctr 中的已分区表和已分区索引,已将返回值从 NULL 更改为 0。
  • 更正了列 FirstIAM 中返回的结果。