STATISTICS表
该STATISTICS表提供有关表索引的信息。
STATISTICS代表表统计信息的列包含缓存的值。该information_schema_stats_expiry系统变量定义缓存表统计到期之前的一段时间。默认值为86400秒(24小时)。如果没有缓存的统计信息或统计信息已过期,则在查询表统计信息列时将从存储引擎检索统计信息。要随时更新给定表的缓存值,请使用ANALYZE TABLE。要始终直接从存储引擎检索最新统计信息,请设置information_schema_stats_expiry=0。有关更多信息,请参见“优化INFORMATION_SCHEMA查询”。
注意如果
innodb_read_only启用了系统变量,则ANALYZE TABLE可能会失败,因为它无法更新使用的数据字典中的统计表InnoDB。对于ANALYZE TABLE更新密钥分发的操作,即使该操作更新表本身(例如,如果它是MyISAM表),也可能会发生故障。要获取更新的分发统计信息,请设置information_schema_stats_expiry=0。
该STATISTICS表包含以下列:
TABLE_CATALOG包含索引的表所属的目录的名称。此值始终为
def。TABLE_SCHEMA包含索引的表所属的架构(数据库)的名称。
TABLE_NAME包含索引的表的名称。
NON_UNIQUE如果索引不能包含重复项,则为0;如果可以,则为1。
INDEX_SCHEMA索引所属的架构(数据库)的名称。
INDEX_NAME索引名称。如果索引是主键,则名称始终为
PRIMARY。SEQ_IN_INDEX索引中的列序号,从1开始。
COLUMN_NAME列名。另请参见该
EXPRESSION列的说明。COLLATION列如何在索引中排序。它可以具有值
A(升序),D(降序)或NULL(未排序)。CARDINALITY索引中唯一值数量的估计。要更新此数字,请运行
ANALYZE TABLE或(对于MyISAM表)运行myisamchk -a。CARDINALITY基于存储为整数的统计信息进行计数,因此即使对于小型表,该值也不一定精确。基数越高,MySQL在进行联接时使用索引的机会越大。SUB_PART索引前缀。也就是说,
NULL如果对整个列进行了索引,则如果仅对该列进行部分索引,则为索引字符的数量。注意
前缀限制以字节为单位。然而,前缀长度为索引规范
CREATE TABLE,ALTER TABLE和CREATE INDEX语句解释为非二进制串类型的字符数(CHAR,VARCHAR,TEXT对于二进制串类型),并且字节数(BINARY,VARBINARY,BLOB)。为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑到这一点。有关索引前缀的更多信息,请参见“列索引”和“ CREATE INDEX语句”。
PACKED指示密钥的包装方式。
NULL如果不是这样。NULLABLE包含
YES是否该列可能包含NULL值,''否则包含。INDEX_TYPE使用的索引方法(
BTREE,FULLTEXT,HASH,RTREE)。COMMENT关于索引的信息未在其自己的列中描述,例如
disabled是否禁用了索引。INDEX_COMMENTCOMMENT创建索引时,为索引提供的任何注释均带有属性。IS_VISIBLE索引是否对优化器可见。请参见“不可见索引”。
EXPRESSIONMySQL 8.0.13和更高版本支持功能性关键部分(请参见 Functional Key Parts),这会影响
COLUMN_NAME和EXPRESSION列:- 对于非功能键部分,
COLUMN_NAME指示由键部分索引的列,且EXPRESSION为NULL。 - 对于功能键部件,
COLUMN_NAME列为NULL并EXPRESSION指示键部件的表达式。
- 对于非功能键部分,
注意
- 没有
INFORMATION_SCHEMA索引的标准表。MySQL的列列表是类似于SQL Server 2000和的回报sp_statistics,但QUALIFIER并OWNER与更换CATALOG,并SCHEMA分别。
SHOW INDEX语句中也提供了有关表索引的信息。请参见“ SHOW INDEX语句”。以下语句是等效的:
SELECT *FROM INFORMATION_SCHEMA.STATISTICSWHERE table_name = 'tbl_name' AND table_schema = 'db_name'SHOW INDEX FROM tbl_nameFROM db_name
