### 26.3.34 信息\_模式统计表

[](<>)

这[`统计数据`](information-schema-statistics-table.html)table 提供有关表索引的信息。

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

笔记

如果[`innodb_read_only`](innodb-parameters.html#sysvar_innodb_read_only)系统变量已启用，[`分析表`](analyze-table.html)可能会失败，因为它无法更新数据字典中的统计表，这些表使用`InnoDB`.为了[`分析表`](analyze-table.html)更新密钥分布的操作，即使该操作更新了表本身（例如，如果它是`MyISAM`桌子）。要获取更新的分布统计信息，请设置[`information_schema_stats_expiry=0`](server-system-variables.html#sysvar_information_schema_stats_expiry).

这[`统计数据`](information-schema-statistics-table.html)表有这些列：

-   `表目录`

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

-   `TABLE_SCHEMA`

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

-   `TABLE_NAME`

    包含索引的表的名称。

-   `NON_UNIQUE`

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

-   `INDEX_SCHEMA`

    索引所属的架构（数据库）的名称。

-   `INDEX_NAME`

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

-   `SEQ_IN_INDEX`

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

-   `COLUMN_NAME`

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

-   `整理`

    列在索引中的排序方式。这可以有值`一种`（上升），`D`（下降），或`空值`（未排序）。

-   `基数`

    对索引中唯一值数量的估计。要更新此号码，请运行[`分析表`](analyze-table.html)或（对于`MyISAM`表）[**myisamchk -a**](myisamchk.html).

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

-   `子部分`

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

    笔记

    字首*限制*以字节为单位。但是，前缀*长度*对于索引规范[`创建表`](create-table.html),[`更改表`](alter-table.html)， 和[`创建索引`](create-index.html)语句被解释为非二进制字符串类型的字符数 ([`字符`](char.html),[`VARCHAR`](char.html),[`文本`](blob.html)) 和二进制字符串类型的字节数 ([`二进制`](binary-varbinary.html),[`变量`](binary-varbinary.html),[`斑点`](blob.html)）。在为使用多字节字符集的非二进制字符串列指定前缀长度时，请考虑到这一点。

    有关索引前缀的更多信息，请参阅[第 8.3.5 节，“列索引”](column-indexes.html)， 和[第 13.1.15 节，“CREATE INDEX 语句”](create-index.html).

-   `包装好的`

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

-   `可空的`

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

-   `INDEX_TYPE`

    使用的索引方法（`BTREE`, `全文`, `哈希`, `RTREE`）。

-   `评论`

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

-   `INDEX_COMMENT`

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

-   `IS_VISIBLE`

    索引是否对优化器可见。看[第 8.3.12 节，“不可见索引”](invisible-indexes.html).

-   `表达`

    MySQL 8.0.13 及更高版本支持功能关键部分（请参阅[功能关键部件](create-index.html#create-index-functional-key-parts))，这会影响到`COLUMN_NAME`和`表达`列：

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

    -   对于功能键部分，`COLUMN_NAME`列是`空值`和`表达`表示关键部分的表达式。

#### 笔记

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

    有关表索引的信息也可从[`显示索引`](show-index.html)陈述。看[第 13.7.7.22 节，“显示索引语句”](show-index.html).以下语句是等效的：


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

SHOW INDEX
  FROM tbl_name
  FROM db_name
```
