STATISTICS表提供有关表索引的信息。
STATISTICS代表表统计信息的 列包含缓存的值。该 information_schema_stats_expiry 系统变量定义缓存表统计到期之前的一段时间。默认值为86400秒(24小时)。如果没有缓存的统计信息或统计信息已过期,则在查询表统计信息列时将从存储引擎检索统计信息。要随时更新给定表的缓存值,请使用ANALYZE TABLE。要始终直接从存储引擎检索最新统计信息,请设置 information_schema_stats_expiry=0。有关更多信息,请参见 第8.2.3节“优化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)。为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑到这一点。
有关索引前缀的更多信息,请参见 第8.3.5节“列索引”和 第13.1.15节“ CREATE INDEX语句”。
PACKED
指示密钥的包装方式。NULL如果不是这样。
NULLABLE
包含YES该列是否包含NULL值,''如果不包含 。
INDEX_TYPE
使用的索引方法(BTREE, FULLTEXT,HASH, RTREE)。
COMMENT
关于索引的信息未在其自己的列中描述,例如disabled是否禁用了索引。
INDEX_COMMENT
COMMENT创建索引时,为索引 提供的任何注释均带有 属性。
IS_VISIBLE
索引是否对优化器可见。请参见 第8.3.12节“不可见索引”。
EXPRESSION
MySQL 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语句中 也提供了有关表索引的信息 。请参见 第13.7.7.22节“ SHOW INDEX语句”。以下语句是等效的:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_name = 'tbl_name'
AND table_schema = 'db_name'
SHOW INDEX
FROM tbl_name
FROM db_name