### 26.3.38 信息\_模式表表 [](<>) 这[`表格`](information-schema-tables-table.html)table 提供有关数据库中表的信息。 中的列[`表格`](information-schema-tables-table.html)表示表统计信息的值保存缓存值。这[`information_schema_stats_expiry`](server-system-variables.html#sysvar_information_schema_stats_expiry)系统变量定义缓存表统计信息过期之前的时间段。默认值为 86400 秒(24 小时)。如果没有缓存统计信息或统计信息已过期,则在查询表统计信息列时从存储引擎中检索统计信息。要随时更新给定表的缓存值,请使用[`分析表`](analyze-table.html).要始终直接从存储引擎中检索最新的统计信息,请设置[`information_schema_stats_expiry`](server-system-variables.html#sysvar_information_schema_stats_expiry)到`0`.有关详细信息,请参阅[第 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-tables-table.html)表有这些列: - `表目录` 表所属目录的名称。这个值总是`定义`. - `TABLE_SCHEMA` 表所属的架构(数据库)的名称。 - `TABLE_NAME` 表的名称。 - `TABLE_TYPE` `基表`对于一张桌子,`看法`观看,或`系统视图`为`INFORMATION_SCHEMA`桌子。 这[`表格`](information-schema-tables-table.html)表未列出`暂时的`表。 - `引擎` 表的存储引擎。看[第 15 章,*InnoDB 存储引擎*](innodb-storage-engine.html), 和[第 16 章,*替代存储引擎*](storage-engines.html). 对于分区表,`引擎`显示所有分区使用的存储引擎的名称。 - `版本` 此列未使用。随着去除`.frm`MySQL 8.0 中的文件,此列现在报告硬编码值`10`, 这是最后一个`.frm`MySQL 5.7 中使用的文件版本。 - `ROW_FORMAT` 行存储格式(`固定的`,`动态的`,`压缩`,`多余的`,`袖珍的`)。为了`MyISAM`表,`动态的`对应于什么[**myisamchk -dvv**](myisamchk.html)报告为`包装好的`. - `TABLE_ROWS` 行数。一些存储引擎,例如`MyISAM`,存储确切的计数。对于其他存储引擎,例如`InnoDB`,这个值是一个近似值,可能与实际值相差 40% 到 50%。在这种情况下,使用`选择计数(*)`以获得准确的计数。 `TABLE_ROWS`是`空值`为了`INFORMATION_SCHEMA`表。 为了[`InnoDB`](innodb-storage-engine.html)表中,行数只是 SQL 优化中使用的粗略估计。(如果[`InnoDB`](innodb-storage-engine.html)表已分区。) - `AVG_ROW_LENGTH` 平均行长。 - `DATA_LENGTH` 为了`MyISAM`,`DATA_LENGTH`是数据文件的长度,以字节为单位。 为了`InnoDB`,`DATA_LENGTH`是为聚集索引分配的近似空间量,以字节为单位。具体来说,它是聚集索引大小(以页为单位)乘以`InnoDB`页面大小。 有关其他存储引擎的信息,请参阅本节末尾的注释。 - `MAX_DATA_LENGTH` 为了`MyISAM`,`MAX_DATA_LENGTH`是数据文件的最大长度。给定使用的数据指针大小,这是可以存储在表中的数据总字节数。 未用于`InnoDB`. 有关其他存储引擎的信息,请参阅本节末尾的注释。 - `INDEX_LENGTH` 为了`MyISAM`,`INDEX_LENGTH`是索引文件的长度,以字节为单位。 为了`InnoDB`,`INDEX_LENGTH`是为非聚集索引分配的近似空间量,以字节为单位。具体来说,它是非聚集索引大小的总和,以页为单位,乘以`InnoDB`页面大小。 有关其他存储引擎的信息,请参阅本节末尾的注释。 - `DATA_FREE` 已分配但未使用的字节数。 `InnoDB`tables 报告该表所属的表空间的可用空间。对于位于共享表空间中的表,这是共享表空间的空闲空间。如果您使用多个表空间并且该表有自己的表空间,则可用空间仅用于该表。空闲空间是指完全空闲范围中的字节数减去安全裕度。即使可用空间显示为 0,只要不需要分配新的扩展区,就可以插入行。 对于 NDB 集群,`DATA_FREE`显示在磁盘上分配给磁盘数据表或磁盘碎片但未被使用的空间。(内存数据资源使用情况由`DATA_LENGTH`柱子。) 对于分区表,这个值只是一个估计值,可能不是绝对正确的。在这种情况下获取此信息的更准确方法是查询`INFORMATION_SCHEMA` [`分区`](information-schema-partitions-table.html)表,如本例所示: ``` SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable'; ``` 有关详细信息,请参阅[第 26.3.21 节,“信息\_SCHEMA 分区表”](information-schema-partitions-table.html). - `自动递增` 下一个`自动递增`价值。 - `CREATE_TIME` 创建表的时间。 - `更新时间` 上次更新数据文件的时间。对于某些存储引擎,此值为`空值`.例如,`InnoDB`在其存储多个表[系统表空间](glossary.html#glos_system_tablespace)并且数据文件时间戳不适用。即使[每表文件](glossary.html#glos_file_per_table)模式与每个`InnoDB`单独的表`.ibd`文件,[变化缓冲](glossary.html#glos_change_buffering)可以延迟写入数据文件,因此文件修改时间与上次插入、更新或删除的时间不同。为了`MyISAM`,使用数据文件时间戳;但是,在 Windows 上,时间戳不会被更新更新,因此该值不准确。 `更新时间`显示最后一个时间戳值[`更新`](update.html),[`插入`](insert.html), 要么[`删除`](delete.html)执行于`InnoDB`未分区的表。对于 MVCC,时间戳值反映了[`犯罪`](commit.html)时间,这被认为是最后一次更新时间。重新启动服务器或将表从`InnoDB`数据字典缓存。 - `CHECK_TIME` 上次检查表的时间。这次不是所有的存储引擎都会更新,这种情况下,值总是`空值`. 对于分区[`InnoDB`](innodb-storage-engine.html)表,`CHECK_TIME`总是`空值`. - `TABLE_COLLATION` 表默认排序规则。输出没有明确列出表默认字符集,但排序规则名称以字符集名称开头。 - `校验和` 实时校验和值(如果有)。 - `CREATE_OPTIONS` 使用的额外选项[`创建表`](create-table.html). `CREATE_OPTIONS`节目`分区的`对于分区表。 在 MySQL 8.0.16 之前,`CREATE_OPTIONS`显示`加密`为在 file-per-table 表空间中创建的表指定的子句。从 MySQL 8.0.16 开始,如果 table 已加密或指定的加密与 schema 加密不同,它会显示 file-per-table 表空间的加密子句。对于在通用表空间中创建的表,未显示加密子句。要识别每个表的加密文件和通用表空间,请查询[`INNODB_TABLESPACES`](information-schema-innodb-tablespaces-table.html) `加密`柱子。 当创建一个表时[严格模式](glossary.html#glos_strict_mode)禁用,如果不支持指定的行格式,则使用存储引擎的默认行格式。表格的实际行格式报告在`ROW_FORMAT`柱子。`CREATE_OPTIONS`显示在[`创建表`](create-table.html)陈述。 更改表的存储引擎时,不适用于新存储引擎的表选项将保留在表定义中,以便在必要时将具有先前定义的选项的表恢复为原始存储引擎。这`CREATE_OPTIONS`列可能会显示保留的选项。 - `TABLE_COMMENT` 创建表时使用的注释(或有关 MySQL 为何无法访问表信息的信息)。 #### 笔记 - 为了[`新开发银行`](mysql-cluster.html)表,此语句的输出显示适当的值`AVG_ROW_LENGTH`和`DATA_LENGTH`列,除了[`斑点`](blob.html)不考虑列。 - 为了[`新开发银行`](mysql-cluster.html)表,`DATA_LENGTH`仅包括存储在主存储器中的数据;这`MAX_DATA_LENGTH`和`DATA_FREE`列适用于磁盘数据。 - 对于 NDB Cluster 磁盘数据表,`MAX_DATA_LENGTH`显示为磁盘数据表或片段的磁盘部分分配的空间。(内存数据资源使用情况由`DATA_LENGTH`柱子。) - 为了`记忆`表`DATA_LENGTH`,`MAX_DATA_LENGTH`, 和`INDEX_LENGTH`值近似于实际分配的内存量。分配算法会大量保留内存以减少分配操作的次数。 - 对于视图,大多数[`表格`](information-schema-tables-table.html)列为 0 或`空值`除了那个`TABLE_NAME`表示视图名称,`CREATE_TIME`表示创建时间,并且`TABLE_COMMENT`说`看法`. 表格信息也可从[`显示表状态`](show-table-status.html)和[`显示表格`](show-tables.html)陈述。看[第 13.7.7.38 节,“SHOW TABLE STATUS 语句”](show-table-status.html), 和[第 13.7.7.39 节,“SHOW TABLES 语句”](show-tables.html).以下语句是等效的: ``` SELECT TABLE_NAME, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM, CREATE_OPTIONS, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'db_name' [AND table_name LIKE 'wild'] SHOW TABLE STATUS FROM db_name [LIKE 'wild'] ``` 以下语句是等效的: ``` SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'db_name' [AND table_name LIKE 'wild'] SHOW FULL TABLES FROM db_name [LIKE 'wild'] ```