Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The INFORMATION_SCHEMA TABLES Table

28.3.38 INFORMATION_SCHEMA 表

TABLES 表提供了数据库中的表信息。

TABLES 表中,表示表统计信息的列持有缓存值。information_schema_stats_expiry 系统变量定义了缓存表统计信息的过期期限,默认为 86400 秒(24 小时)。如果没有缓存统计信息或统计信息已过期,则在查询表统计信息列时从存储引擎中检索统计信息。要在任何时候更新缓存值,可以使用 ANALYZE TABLE。要始终从存储引擎中检索最新的统计信息,可以将 information_schema_stats_expiry 设置为 0。有关更多信息,请参阅 第 10.2.3 节,“优化 INFORMATION_SCHEMA 查询”

Note

如果启用了 innodb_read_only 系统变量,ANALYZE TABLE 可能会失败,因为它无法更新数据词典中的统计信息表,该表使用 InnoDB。对于 ANALYZE TABLE 操作,哪怕是更新表本身(例如,如果它是一个 MyISAM 表),也可能会失败。要获取更新的分布统计信息,可以将 information_schema_stats_expiry 设置为 0

TABLES 表具有以下列:

  • TABLE_CATALOG

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

  • TABLE_SCHEMA

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

  • TABLE_NAME

    该表的名称。

  • TABLE_TYPE

    该表的类型:BASE TABLE 表示基本表,VIEW 表示视图,SYSTEM VIEW 表示 INFORMATION_SCHEMA 表。

    TABLES 表不列出 TEMPORARY 表。

  • ENGINE

    该表的存储引擎。请参阅 第 17 章,《InnoDB 存储引擎》第 18 章,《替代存储引擎》

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

  • VERSION

    该列未使用。在 MySQL 8.0 中删除了 .frm 文件,现在该列报告一个硬编码值 10,该值是 MySQL 5.7 中最后一个 .frm 文件版本。

  • ROW_FORMAT

    行存储格式(FixedDynamicCompressedRedundantCompact)。对于 MyISAM 表,Dynamic 对应于 myisamchk -dvv 报告的 Packed

  • TABLE_ROWS

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

    TABLE_ROWSNULL 对于 INFORMATION_SCHEMA 表。

    对于 InnoDB 表,行计数仅是一个粗略的估算,用于 SQL 优化。(这也是 InnoDB 表被分区的情况。)

  • AVG_ROW_LENGTH

    平均行长度。

  • DATA_LENGTH

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

    对于 InnoDBDATA_LENGTH 是聚簇索引的近似空间分配,以字节为单位。具体来说,它是聚簇索引的大小,以页为单位,乘以 InnoDB 页大小。

    请参阅本节末尾的注释,以获取其他存储引擎的信息。

  • MAX_DATA_LENGTH

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

    未使用 InnoDB

    请参阅本节末尾的注释,以获取其他存储引擎的信息。

  • INDEX_LENGTH

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

    对于 InnoDBINDEX_LENGTH 是非聚簇索引的近似空间分配,以字节为单位。具体来说,它是非聚簇索引的大小,以页为单位,乘以 InnoDB 页大小。

    请参阅本节末尾的注释,以获取其他存储引擎的信息。

  • DATA_FREE

    未使用的已分配字节数。

    InnoDB 表报告表空间的空闲空间。如果表位于共享表空间中,则为空闲空间的共享表空间。如果使用多个表空间,并且表具有自己的表空间,则为空闲空间的该表。空闲空间是完全空闲的范围减去安全边际。即使空闲空间显示为 0,也可能插入行,只要不需要分配新范围。

    对于 NDB Cluster,DATA_FREE 显示磁盘上未使用的空间,但已分配给磁盘数据表或磁盘碎片。(内存数据资源使用情况报告在 DATA_LENGTH 列中。)

    对于分区表,这个值仅是一个估算,可能不完全正确。在这种情况下,查询 INFORMATION_SCHEMA PARTITIONS 表是一个更准确的方法,如下所示:

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

    有关更多信息,请参阅 第 28.3.21 节,“INFORMATION_SCHEMA PARTITIONS 表”

  • AUTO_INCREMENT

    下一个 AUTO_INCREMENT 值。

  • CREATE_TIME

    表创建的时间。

  • UPDATE_TIME

    表最后更新的时间。对于某些存储引擎,这个值为 NULL。即使使用每个 InnoDB 表的单独 .ibd 文件,文件每表 模式和 更改缓冲 可以延迟写入数据文件,因此文件修改时间与最后插入、更新或删除的时间不同。对于 MyISAM,使用数据文件时间戳;然而,在 Windows 上,时间戳不会因更新而更新,因此该值不准确。

    UPDATE_TIME 显示最后一个 UPDATEINSERTDELETEInnoDB 表上的时间戳值,除非表被分区。在 MVCC 中,时间戳值反映了 COMMIT 时间,认为是最后更新时间。时间戳不会在服务器重启或表从 InnoDB 数据字典缓存中被逐出时持久化。

  • 检查时间

    表最后检查的时间。不所有存储引擎都更新这个时间,在这种情况下,值总是 NULL

    对于分区的 InnoDB 表, CHECK_TIME 总是 NULL

  • 表排序规则

    表的默认排序规则。输出不明确地列出表的默认字符集,但排序规则名称以字符集名称开头。

  • 校验和

    实时校验和值,如果有的话。

  • 创建选项

    使用 CREATE TABLE 时的额外选项。

    创建选项 显示 分区 对于分区表。

    创建选项 显示用于文件每表表空间的 加密 子句。如果表加密或指定的加密不同于模式加密,则显示加密子句。对于通用表空间,不显示加密子句。要标识加密的文件每表和通用表空间,请查询 INNODB_TABLESPACES 加密 列。

    在禁用 严格模式 时创建表,存储引擎的默认行格式将被使用,如果指定的行格式不受支持。实际的行格式将报告在 行格式 列中。创建选项 显示在 CREATE TABLE 语句中指定的行格式。

    当更改表的存储引擎时,表选项将保留在表定义中,以便在必要时将表恢复到原始存储引擎。创建选项 列可能显示保留的选项。

  • 表注释

    创建表时使用的注释(或 MySQL 无法访问表信息的信息)。

注意

  • 对于 NDB 表,语句的输出显示适当的 AVG_ROW_LENGTHDATA_LENGTH 列值,除了 BLOB 列不被考虑在内。

  • 对于 NDB 表, DATA_LENGTH 只包括主内存中的数据; MAX_DATA_LENGTHDATA_FREE 列适用于磁盘数据。

  • 对于 NDB 集群磁盘数据表, MAX_DATA_LENGTH 显示磁盘部分的分配空间。(内存数据资源使用情况报告在 DATA_LENGTH 列中。)

  • 对于 MEMORY 表, DATA_LENGTHMAX_DATA_LENGTHINDEX_LENGTH 值近似于实际分配的内存。分配算法以大块分配内存,以减少分配操作的数量。

  • 对于视图,大多数 TABLES 列都是 0 或 NULL,除了 TABLE_NAME 指示视图名称、 CREATE_TIME 指示创建时间和 TABLE_COMMENTVIEW

表信息也可以从 SHOW TABLE STATUSSHOW TABLES 语句中获得。见 第 15.7.7.40 节,“SHOW TABLE STATUS 语句”第 15.7.7.41 节,“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']