该 STATISTICS
表提供了表索引信息。
在 STATISTICS
表中,表示表统计信息的列持有缓存值。information_schema_stats_expiry
系统变量定义了缓存表统计信息的过期时间,默认为 86400 秒(24 小时)。如果没有缓存统计信息或统计信息已过期,则在查询表统计信息列时从存储引擎中检索统计信息。要在任何时候为给定表更新缓存值,请使用 ANALYZE TABLE
。要始终从存储引擎中检索最新的统计信息,请设置 information_schema_stats_expiry=0
。有关更多信息,请参阅 第 10.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
。Note前缀 限制 以字节为单位测量。然而,前缀 长度 对于索引规范中的
CREATE TABLE
、ALTER TABLE
和CREATE INDEX
语句被解释为非二进制字符串类型 (CHAR
、VARCHAR
、TEXT
) 的字符数和二进制字符串类型 (BINARY
、VARBINARY
、BLOB
) 的字节数。在指定非二进制字符串列的前缀长度时,请考虑到这一点。有关索引前缀的更多信息,请参阅 第 10.3.5 节,“列索引” 和 第 15.1.15 节,“CREATE INDEX 语句”。
-
PACKED
指示键如何打包。
NULL
如果它不是。 -
NULLABLE
包含
YES
如果列可能包含NULL
值,否则为空。 -
INDEX_TYPE
索引方法 (
BTREE
、FULLTEXT
、HASH
、RTREE
)。 -
COMMENT
索引的信息,不在其自己的列中描述,例如
disabled
如果索引被禁用。 -
INDEX_COMMENT
在创建索引时提供的注释,带有
COMMENT
属性。 -
IS_VISIBLE
索引是否对优化器可见。参阅 第 10.3.12 节,“不可见索引”。
-
EXPRESSION
MySQL 支持函数键部分(参阅 函数键部分),这影响了
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
语句中获得。参阅 第 15.7.7.23 节,“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
生成的不可见主键列信息默认情况下在该表中可见。您可以通过设置 show_gipk_in_create_table_and_information_schema = OFF
来隐藏该信息。有关更多信息,请参阅 第 15.1.20.11 节,“生成的不可见主键”。