24.25 INFORMATION_SCHEMA TABLEStable
TABLEStable 提供有关数据库中 table 的信息。
TABLEStable 具有以下列:
TABLE_CATALOG
该 table 所属的目录的名称。此值始终为def
。
TABLE_SCHEMA
table 所属的模式(数据库)的名称。
TABLE_NAME
table 的名称。
TABLE_TYPE
BASE TABLE
table 示 table 格,VIEW
table 示视图,或SYSTEM VIEW
table 示INFORMATION_SCHEMA
table 格。
TABLEStable 未列出TEMPORARY
table。
ENGINE
table 的存储引擎。参见第 14 章,InnoDB 存储引擎和第 15 章,备用存储引擎。
对于分区 table,ENGINE
显示所有分区使用的存储引擎的名称。
VERSION
table 的.frm
文件的版本号。
ROW_FORMAT
行存储格式(Fixed
,Dynamic
,Compressed
,Redundant
,Compact
)。对于MyISAM
个 table,Dynamic
对应于myisamchk -dvv报告为Packed
。 InnoDB
table 格式在使用Antelope
文件格式时为Redundant
或Compact
,在使用Barracuda
文件格式时为Compressed
或Dynamic
。
TABLE_ROWS
行数。某些存储引擎(例如MyISAM
)存储准确的计数。对于其他存储引擎,例如InnoDB
,此值是一个近似值,可能与实际值相差 40%至 50%。在这种情况下,请使用SELECT COUNT(*)
获得准确的计数。
INFORMATION_SCHEMA
个 table 的TABLE_ROWS
是NULL
。
对于InnoDBtable,行数只是 SQL 优化中使用的粗略估计。 (如果InnoDBtable 已分区,则也是如此。)
AVG_ROW_LENGTH
平均行长。
有关相关信息,请参阅本节末尾的 Comments。
DATA_LENGTH
对于MyISAM
,DATA_LENGTH
是数据文件的长度,以字节为单位。
对于InnoDB
,DATA_LENGTH
是为聚 Cluster 索引分配的大约空间量(以字节为单位)。具体来说,它是聚 Cluster 索引大小(以页为单位)乘以InnoDB
页面大小。
有关其他存储引擎的信息,请参阅本节末尾的 Comments。
MAX_DATA_LENGTH
对于MyISAM
,MAX_DATA_LENGTH
是数据文件的最大长度。给定使用的数据指针大小,这是可以存储在 table 中的数据字节总数。
InnoDB
未使用。
有关其他存储引擎的信息,请参阅本节末尾的 Comments。
INDEX_LENGTH
对于MyISAM
,INDEX_LENGTH
是索引文件的长度,以字节为单位。
对于InnoDB
,INDEX_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,并且数据文件时间戳不适用。即使在每个InnoDB
table 位于单独的.ibd
文件中的file-per-table模式下,change buffering也会延迟对数据文件的写入,因此文件修改时间与上一次插入,更新或删除的时间不同。对于MyISAM
,使用数据文件时间戳;但是,在 Windows 上,时间戳不会通过更新进行更新,因此该值不准确。
UPDATE_TIME
显示在未分区的InnoDB
table 上执行的最后UPDATE,INSERT或DELETE的时间戳值。对于 MVCC,时间戳记值反映了COMMIT时间,该时间被视为最后更新时间。重新启动服务器或从InnoDB
数据字典高速缓存中逐出 table 时,时间戳记不会保留。
UPDATE_TIME
列还显示分区InnoDB
table 的此信息。
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_LENGTH
和DATA_LENGTH
列的适当值,但不考虑BLOB列。 -
对于NDB个 table,
DATA_LENGTH
仅包括存储在主存储器中的数据;MAX_DATA_LENGTH
和DATA_FREE
列适用于“磁盘数据”。 -
对于 NDB 群集磁盘数据 table,
MAX_DATA_LENGTH
显示为磁盘数据 table 或片段的磁盘部分分配的空间。 (内存数据资源使用情况由DATA_LENGTH
列报告.) -
对于
MEMORY
table,DATA_LENGTH
,MAX_DATA_LENGTH
和INDEX_LENGTH
值近似于实际分配的内存量。分配算法会大量保留内存,以减少分配操作的数量。 -
对于视图,所有TABLES列均为
NULL
,但TABLE_NAME
table 示视图名称,TABLE_COMMENT
table 示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']