文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息文件 (Gzip) - 4.0Mb
信息文件 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  INFORMATION_SCHEMA TABLES 表

28.3.38 INFORMATION_SCHEMA TABLES 表

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

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

注意

如果启用了 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,视图的类型为 VIEWINFORMATION_SCHEMA 表的类型为 SYSTEM VIEW

    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(*) 获取准确计数。

    INFORMATION_SCHEMA 表的 TABLE_ROWSNULL

    对于 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 集群,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 显示未分区的 InnoDB 表上执行的最后一次 UPDATEINSERTDELETE 的时间戳值。对于 MVCC,时间戳值反映 COMMIT 时间,该时间被视为最后更新时间。重新启动服务器或从 InnoDB 数据字典缓存中逐出表时,不会保留时间戳。

  • CHECK_TIME

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

    对于分区的 InnoDB 表,CHECK_TIME 始终为 NULL

  • TABLE_COLLATION

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

  • CHECKSUM

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

  • CREATE_OPTIONS

    CREATE TABLE 一起使用的额外选项。

    对于分区表,CREATE_OPTIONS 显示 partitioned

    CREATE_OPTIONS 显示为每个表一个文件表空间中创建的表指定的 ENCRYPTION 子句。如果表已加密或指定的加密与架构加密不同,则它会显示每个表一个文件表空间的加密子句。对于在常规表空间中创建的表,不会显示加密子句。要识别加密的每个表一个文件和常规表空间,请查询 INNODB_TABLESPACES ENCRYPTION 列。

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

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

  • TABLE_COMMENT

    创建表时使用的注释(或有关 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_COMMENT 显示 VIEW

表信息也可以从 SHOW TABLE STATUSSHOW TABLES 语句中获取。请参阅 第 15.7.7.37 节,“SHOW TABLE STATUS 语句”第 15.7.7.38 节,“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']