24.25 INFORMATION_SCHEMA TABLEStable

TABLEStable 提供有关数据库中 table 的信息。

TABLEStable 具有以下列:

  • TABLE_CATALOG

该 table 所属的目录的名称。此值始终为def

  • TABLE_SCHEMA

table 所属的模式(数据库)的名称。

  • TABLE_NAME

table 的名称。

  • TABLE_TYPE

BASE TABLEtable 示 table 格,VIEWtable 示视图,或SYSTEM VIEWtable 示INFORMATION_SCHEMAtable 格。

TABLEStable 未列出TEMPORARYtable。

  • ENGINE

table 的存储引擎。参见第 14 章,InnoDB 存储引擎第 15 章,备用存储引擎

对于分区 table,ENGINE显示所有分区使用的存储引擎的名称。

  • VERSION

table 的.frm文件的版本号。

  • ROW_FORMAT

行存储格式(FixedDynamicCompressedRedundantCompact)。对于MyISAM个 table,Dynamic对应于myisamchk -dvv报告为PackedInnoDBtable 格式在使用Antelope文件格式时为RedundantCompact,在使用Barracuda文件格式时为CompressedDynamic

  • TABLE_ROWS

行数。某些存储引擎(例如MyISAM)存储准确的计数。对于其他存储引擎,例如InnoDB,此值是一个近似值,可能与实际值相差 40%至 50%。在这种情况下,请使用SELECT COUNT(*)获得准确的计数。

INFORMATION_SCHEMA个 table 的TABLE_ROWSNULL

对于InnoDBtable,行数只是 SQL 优化中使用的粗略估计。 (如果InnoDBtable 已分区,则也是如此。)

  • AVG_ROW_LENGTH

平均行长。

有关相关信息,请参阅本节末尾的 Comments。

  • DATA_LENGTH

对于MyISAMDATA_LENGTH是数据文件的长度,以字节为单位。

对于InnoDBDATA_LENGTH是为聚 Cluster 索引分配的大约空间量(以字节为单位)。具体来说,它是聚 Cluster 索引大小(以页为单位)乘以InnoDB页面大小。

有关其他存储引擎的信息,请参阅本节末尾的 Comments。

  • MAX_DATA_LENGTH

对于MyISAMMAX_DATA_LENGTH是数据文件的最大长度。给定使用的数据指针大小,这是可以存储在 table 中的数据字节总数。

InnoDB未使用。

有关其他存储引擎的信息,请参阅本节末尾的 Comments。

  • INDEX_LENGTH

对于MyISAMINDEX_LENGTH是索引文件的长度,以字节为单位。

对于InnoDBINDEX_LENGTH是分配给非聚集索引的大约空间量(以字节为单位)。具体来说,它是非聚集索引大小(以页为单位)的总和乘以InnoDB页面大小。

有关其他存储引擎的信息,请参阅本节末尾的 Comments。

  • DATA_FREE

已分配但未使用的字节数。

InnoDB个 table 报告该 table 所属的 table 空间的可用空间。对于位于共享 table 空间中的 table,这是共享 table 空间的可用空间。如果使用多个 table 空间,并且该 table 具有其自己的 table 空间,则可用空间仅用于该 table。可用空间是指完全可用范围中的字节数减去安全裕量。即使可用空间显示为 0,只要不需要分配新的盘区,也可以插入行。

对于 NDB 群集,DATA_FREE显示磁盘上为磁盘数据 table 或磁盘上的碎片分配但未使用的空间。 (内存数据资源使用情况由DATA_LENGTH列报告.)

对于分区 table,此值仅是估计值,可能不是绝对正确。在这种情况下,获取此信息的一种更准确的方法是查询INFORMATION_SCHEMA PARTITIONStable,如本示例所示:

SELECT SUM(DATA_FREE)
    FROM  INFORMATION_SCHEMA.PARTITIONS
    WHERE TABLE_SCHEMA = 'mydb'
    AND   TABLE_NAME   = 'mytable';

有关更多信息,请参见第 24.16 节“ INFORMATION_SCHEMA PARTITIONStable”

  • AUTO_INCREMENT

下一个AUTO_INCREMENT值。

  • CREATE_TIME

创建 table 的时间。

  • UPDATE_TIME

数据文件的最后更新时间。对于某些存储引擎,此值为NULL。例如,InnoDB在其system tablespace中存储了多个 table,并且数据文件时间戳不适用。即使在每个InnoDBtable 位于单独的.ibd文件中的file-per-table模式下,change buffering也会延迟对数据文件的写入,因此文件修改时间与上一次插入,更新或删除的时间不同。对于MyISAM,使用数据文件时间戳;但是,在 Windows 上,时间戳不会通过更新进行更新,因此该值不准确。

UPDATE_TIME显示在未分区的InnoDBtable 上执行的最后UPDATEINSERTDELETE的时间戳值。对于 MVCC,时间戳记值反映了COMMIT时间,该时间被视为最后更新时间。重新启动服务器或从InnoDB数据字典高速缓存中逐出 table 时,时间戳记不会保留。

UPDATE_TIME列还显示分区InnoDBtable 的此信息。

  • CHECK_TIME

上次检查 table 的时间。并非所有存储引擎这次都更新,在这种情况下,该值始终为NULL

对于已分区的InnoDB个 table,CHECK_TIME始终为NULL

  • TABLE_COLLATION

该 table 的默认排序规则。输出未显式列出 table 默认字符集,但排序规则名称以字符集名称开头。

  • CHECKSUM

实时校验和值(如果有)。

  • CREATE_OPTIONS

CREATE TABLE一起使用的其他选项。

如果 table 已分区,则CREATE_OPTIONS显示partitioned

CREATE_OPTIONS显示为在每个 table 文件 table 空间中创建的 table 指定的ENCRYPTION子句。

创建禁用了strict mode的 table 时,如果不支持指定的行格式,则使用存储引擎的默认行格式。table 的实际行格式在ROW_FORMAT列中报告。 CREATE_OPTIONS显示CREATE TABLE语句中指定的行格式。

更改 table 的存储引擎时,不适用于新存储引擎的 table 选项将保留在 table 定义中,以便在必要时将具有其先前定义的选项的 table 恢复到原始存储引擎。 CREATE_OPTIONS列可能显示保留的选项。

  • TABLE_COMMENT

创建 table 时使用的 Comments(或有关 MySQL 为什么无法访问 table 信息的信息)。

Notes

  • 对于NDBtable,此语句的输出显示AVG_ROW_LENGTHDATA_LENGTH列的适当值,但不考虑BLOB列。

  • 对于NDB个 table,DATA_LENGTH仅包括存储在主存储器中的数据; MAX_DATA_LENGTHDATA_FREE列适用于“磁盘数据”。

  • 对于 NDB 群集磁盘数据 table,MAX_DATA_LENGTH显示为磁盘数据 table 或片段的磁盘部分分配的空间。 (内存数据资源使用情况由DATA_LENGTH列报告.)

  • 对于MEMORYtable,DATA_LENGTHMAX_DATA_LENGTHINDEX_LENGTH值近似于实际分配的内存量。分配算法会大量保留内存,以减少分配操作的数量。

  • 对于视图,所有TABLES列均为NULL,但TABLE_NAMEtable 示视图名称,TABLE_COMMENTtable 示VIEW

table 信息也可以从显示 table 格状态SHOW TABLES语句中获得。参见第 13.7.5.36 节“ SHOW TABLE STATUS 语句”第 13.7.5.37 节“ SHOW TABLES 语句”。以下语句是等效的:

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']