sys.sysindexes (Transact-SQL)
更新日期: 2005 年 12 月 5 日
当前数据库中的每个索引和表在表中各对应一行。此视图不支持 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) |
指向第一页或根页的指针。 在 SQL Server 6.5 版及更早版本中,sysindexes.first 始终指向堆的起点、索引叶级的起点或者 text 和 image 页链的起点。 在 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 的早期版本中,至少有一个 text、ntext 或 image 列的每个表在 sysindexes 中还有一个 indid = 255 的行。在 SQL Server 2005 中,此索引 ID 不再存在。当表或索引具有一个或多个大型对象 (LOB) 数据类型时,将为每个分区分配一个 LOB_DATA 分配单元来管理数据存储。有关详细信息,请参阅表组织和索引组织。
如果表或索引在 ROW_OVERFLOW 分配单元中包含数据,则 dpages、reserved 和 used 列将不返回准确的结果。此外,将单独跟踪每个索引的页计数,并且不对基表的页计数进行聚合。若要查看页计数,请使用 sys.allocation_units 或 sys.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)
帮助和信息
更改历史记录
发布日期 | 历史记录 |
---|---|
2005 年 12 月 5 日 |
|