# 26.3.34 信息_模式统计表

统计数据table 提供有关表索引的信息。

中的列统计数据表示表统计信息的值保存缓存值。这information_schema_stats_expiry系统变量定义缓存表统计信息过期之前的时间段。默认值为 86400 秒(24 小时)。如果没有缓存统计信息或统计信息已过期,则在查询表统计信息列时从存储引擎中检索统计信息。要随时更新给定表的缓存值,请使用分析表.要始终直接从存储引擎中检索最新的统计信息,请设置information_schema_stats_expiry=0.有关详细信息,请参阅第 8.2.3 节,“优化信息_SCHEMA 查询”.

笔记

如果innodb_read_only系统变量已启用,分析表可能会失败,因为它无法更新数据字典中的统计表,这些表使用InnoDB.为了分析表更新密钥分布的操作,即使该操作更新了表本身(例如,如果它是MyISAM桌子)。要获取更新的分布统计信息,请设置information_schema_stats_expiry=0.

统计数据表有这些列:

  • 表目录

    包含索引的表所属的目录的名称。这个值总是定义.

  • TABLE_SCHEMA

    包含索引的表所属的架构(数据库)的名称。

  • TABLE_NAME

    包含索引的表的名称。

  • NON_UNIQUE

    如果索引不能包含重复项,则为 0,如果可以,则为 1。

  • INDEX_SCHEMA

    索引所属的架构(数据库)的名称。

  • INDEX_NAME

    索引的名称。如果索引是主键,则名称总是基本的.

  • SEQ_IN_INDEX

    索引中的列序号,从 1 开始。

  • COLUMN_NAME

    列名称。另见描述表达柱子。

  • 整理

    列在索引中的排序方式。这可以有值一种(上升),D(下降),或空值(未排序)。

  • 基数

    对索引中唯一值数量的估计。要更新此号码,请运行分析表或(对于MyISAM表)myisamchk -a.

    基数是根据存储为整数的统计信息计算的,因此即使对于小表,该值也不一定准确。基数越高,MySQL 在进行连接时使用索引的机会就越大。

  • 子部分

    索引前缀。也就是说,如果列仅被部分索引,则索引字符的数量,空值如果整个列都被索引。

    笔记

    字首限制以字节为单位。但是,前缀长度对于索引规范创建表,更改表, 和创建索引语句被解释为非二进制字符串类型的字符数 (字符,VARCHAR,文本) 和二进制字符串类型的字节数 (二进制,变量,斑点)。在为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑到这一点。

    有关索引前缀的更多信息,请参阅第 8.3.5 节,“列索引”, 和第 13.1.15 节,“CREATE INDEX 语句”.

  • 包装好的

    指示如何打包密钥。空值如果不是。

  • 可空的

    包含是的如果该列可能包含空值价值观和''如果不。

  • INDEX_TYPE

    使用的索引方法(BTREE, 全文, 哈希, RTREE)。

  • 评论

    未在其自己的列中描述的索引的信息,例如禁用如果索引被禁用。

  • INDEX_COMMENT

    为索引提供的任何评论都带有评论创建索引时的属性。

  • IS_VISIBLE

    索引是否对优化器可见。看第 8.3.12 节,“不可见索引”.

  • 表达

    MySQL 8.0.13 及更高版本支持功能关键部分(请参阅功能关键部件),这会影响到COLUMN_NAME表达列:

    • 对于非功能性关键部件,COLUMN_NAME表示由键部分索引的列,并且表达空值.

    • 对于功能键部分,COLUMN_NAME列是空值表达表示关键部分的表达式。

# 笔记

  • 没有标准INFORMATION_SCHEMA索引表。MySQL 列列表类似于 SQL Server 2000 返回的sp_statistics, 除了那个限定符所有者被替换为目录架构, 分别。

    有关表索引的信息也可从显示索引陈述。看第 13.7.7.22 节,“显示索引语句”.以下语句是等效的:

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  AND table_schema = 'db_name'

SHOW INDEX
  FROM tbl_name
  FROM db_name