TABLES 表提供信息 关于数据库中的表。
TABLES 中表示 表统计信息保存缓存的值。information_schema_stats_expiry 系统变量定义缓存表之前的时间段 统计信息过期。默认值为 86400 秒(24 小时)。如果 没有缓存的统计信息或统计信息已过期, 查询表时,从存储引擎中检索统计信息 统计信息列。要随时更新 给定的表,请使用 ANALYZE TABLE。自 始终直接从存储中检索最新的统计信息 引擎,将 information_schema_stats_expiry设置为 。有关详细信息,请参见第 10.2.3 节 “优化 INFORMATION_SCHEMA 查询”。0
注意
如果 innodb_read_only 系统 变量启用,ANALYZE TABLE 可能会失败,因为它无法更新统计信息 数据字典中的表,其中使用 .对于 ANALYZE 更新键分布的 TABLE 操作, 即使操作更新了表本身,也可能发生失败 (例如,如果它是一个表)。自 获取更新的分布统计信息,设置 information_schema_stats_expiry=0。InnoDB``MyISAM
TABLES 表包含以下列:
-
TABLE_CATALOG表所属的目录的名称。此值 总是 .
def -
TABLE_SCHEMA表所属的架构(数据库)的名称。
-
TABLE_NAME表的名称。
-
TABLE_TYPEBASE TABLE对于表、视图或表。VIEW``SYSTEM VIEW``INFORMATION_SCHEMATABLES表不列出表。TEMPORARY -
ENGINE表的存储引擎。请参阅第 17 章 “InnoDB 存储引擎”和第 18 章“备用存储引擎”。
对于分区表,显示 所有分区使用的存储引擎的名称。
ENGINE -
VERSION此列未使用。随着 MySQL 8.0 中文件的删除,本专栏现在 报告硬编码值 ,即 MySQL 中使用的最后一个文件版本 5.7.
.frm``10``.frm -
ROW_FORMAT行存储格式 (、 、 、 )。对于表,对应于 myisamchk -dvv 报告的内容 如。
Fixed``Dynamic``Compressed``Redundant``Compact``MyISAM``Dynamic``Packed -
TABLE_ROWS行数。某些存储引擎(例如 )会存储确切的计数。对于其他 存储引擎,例如 ,此值 是一个近似值,可能与实际值相差如 大约40%至50%。在这种情况下,请使用 以获得准确的计数。
MyISAM``InnoDB``SELECT COUNT(*)TABLE_ROWS用于表。NULL``INFORMATION_SCHEMA -
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表报告了 的可用空间 表所属的表空间。对于位于 共享的表空间,这是共享的空闲空间 表空间。如果您使用多个表空间和 表有自己的表空间,空闲空间仅用于此 桌子。可用空间表示完全空闲的字节数 范围减去安全边际。即使可用空间显示为 0,可以插入只要新的范围 无需分配。对于 NDB Cluster,显示空间 在磁盘上为磁盘数据表分配,但未被磁盘数据表使用,或者 磁盘上的片段。(报告内存中数据资源使用情况 按列。
DATA_FREE``DATA_LENGTH对于分区表,此值只是一个估计值,可能 不是绝对正确的。一种更准确的获取方法 在这种情况下,此信息用于查询
PARTITIONS表,如 以下示例:INFORMATION_SCHEMASELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable'; -
AUTO_INCREMENT下一个值。
AUTO_INCREMENT -
CREATE_TIME创建表的时间。
-
UPDATE_TIME上次更新表的时间。对于某些存储引擎, 此值为 。即使使用“每表一个文件”模式 由于每个表都在一个单独的文件中,更改缓冲可能会延迟对数据文件的写入,因此文件修改 时间与上次插入、更新的时间不同,或者 删除。对于 ,数据文件时间戳 被使用;但是,在 Windows 上,时间戳不会通过以下方式更新 更新,因此该值不准确。
NULL``InnoDB``.ibd``MyISAMUPDATE_TIME显示 的时间戳值 对未分区的表执行的上次UPDATE、INSERT或DELETE。为 MVCC,timestamp 值反映的是COMMIT时间,即 考虑了上次更新时间。时间戳不会持久化 当服务器重新启动或表被逐出时 数据字典缓存。InnoDB``InnoDB -
CHECK_TIME上次检查表的时间。并非所有存储引擎 这次更新,在这种情况下,值始终为 。
NULL对于分区的
InnoDB表,始终是 。CHECK_TIME``NULL -
TABLE_COLLATION表默认排序规则。输出未显式显示 列出表的默认字符集,但排序规则名称 以字符集名称开头。
-
CHECKSUM实时校验和值(如果有)。
-
CREATE_OPTIONS与 CREATE 一起使用的额外选项
表。CREATE_OPTIONS显示分区表。partitioned在 MySQL 8.0.16 之前,显示 为表指定的子句 在 file-per-table 表空间中创建。从 MySQL 8.0.16 开始,它 显示 file-per-table 表空间的加密子句 if 该表已加密,或者如果指定的加密不同 从架构加密。未显示加密子句 用于在常规表空间中创建的表。要识别 加密的 file-per-table 和 general tablespaces,查询
INNODB_TABLESPACES列。CREATE_OPTIONS``ENCRYPTION``ENCRYPTION在禁用严格模式的情况下创建表时, 如果满足以下条件,则使用存储引擎的默认行格式 不支持指定的行格式。实际的行格式 的表在列中报告。 显示行格式 在 CREATE 中指定的
TABLE语句。ROW_FORMAT``CREATE_OPTIONS更改表的存储引擎时,表选项 对新存储引擎不适用的,予以保留 在表定义中启用还原表及其 以前定义的原始存储引擎的选项,如果 必要。该色谱柱可能 显示保留的选项。
CREATE_OPTIONS -
TABLE_COMMENT创建表时使用的注释(或有关以下内容的信息) 为什么MySQL无法访问表信息)。
笔记
- 对于
NDB表,输出 此语句显示 AND 列的适当值,但 AND 列有例外 不采用BLOB列 考虑。AVG_ROW_LENGTH``DATA_LENGTH - 对于
NDB表,包括存储在 main 中的数据 仅内存;和列适用于磁盘数据。DATA_LENGTH``MAX_DATA_LENGTH``DATA_FREE - 对于NDB群集磁盘数据表,显示分配的空间 用于磁盘数据表或片段的磁盘部分。(内存中 数据资源使用情况由列报告。
MAX_DATA_LENGTH``DATA_LENGTH - 对于表,、 、 和 值近似于实际值 分配的内存量。分配算法预留 大量内存以减少分配次数 操作。
MEMORY``DATA_LENGTH``MAX_DATA_LENGTH``INDEX_LENGTH - 对于视图,大多数
TABLES列 为 0 或 except 表示视图名称,表示创建时间, 并说.NULL``TABLE_NAME``CREATE_TIME``TABLE_COMMENT``VIEW
还可以从 SHOW TABLE STATUS 和 SHOW TABLES 语句中获取表信息。请参见第 15.7.7.38 节“SHOW TABLE STATUS 语句”和第 15.7.7.39 节“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']




