SHOW TABLE STATUS
[{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
SHOW TABLE STATUS
与 SHOW TABLES
类似,但它提供了有关每个非 TEMPORARY
表的许多信息。您也可以使用 mysqlshow --status db_name
命令获取此列表。如果存在,LIKE
子句指示要匹配的表名。WHERE
子句可以用于使用更一般的条件选择行,如 第 28.8 节,“SHOW 语句的扩展” 中所述。
此语句还显示有关视图的信息。
SHOW TABLE STATUS
输出包含以下列
Name
表的名称。
Engine
表的存储引擎。参见 第 17 章,InnoDB 存储引擎 和 第 18 章,其他存储引擎。
对于分区表,
Engine
显示所有分区使用的存储引擎的名称。Version
此列未使用。在 MySQL 8.0 中删除
.frm
文件后,此列现在报告硬编码值为10
,这是 MySQL 5.7 中使用的最后一个.frm
文件版本。行格式
行存储格式(
Fixed
、Dynamic
、Compressed
、Redundant
、Compact
)。对于MyISAM
表,Dynamic
对应于 myisamchk -dvv 报告的Packed
。行数
行的数量。一些存储引擎(例如
MyISAM
)存储精确计数。对于其他存储引擎(例如InnoDB
),此值是一个近似值,可能与实际值相差 40% 到 50%。在这种情况下,使用SELECT COUNT(*)
获取准确的计数。对于
INFORMATION_SCHEMA
表,Rows
值为NULL
。平均行长度
平均行长度。
数据长度
对于
MyISAM
,Data_length
是数据文件长度(以字节为单位)。对于
InnoDB
,Data_length
是为聚簇索引分配的近似空间量(以字节为单位)。具体来说,它是聚簇索引大小(以页为单位)乘以InnoDB
页大小。有关其他存储引擎的信息,请参阅本节末尾的说明。
最大数据长度
对于
MyISAM
,Max_data_length
是数据文件的最长长度。这是给定数据指针大小,可以在表中存储的数据的总字节数。对于
InnoDB
,未使用。有关其他存储引擎的信息,请参阅本节末尾的说明。
索引长度
对于
MyISAM
,Index_length
是索引文件长度(以字节为单位)。对于
InnoDB
,Index_length
是为非聚簇索引分配的近似空间量(以字节为单位)。具体来说,它是所有非聚簇索引大小之和(以页为单位)乘以InnoDB
页大小。有关其他存储引擎的信息,请参阅本节末尾的说明。
空闲数据
分配但未使用的字节数。
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
值。创建时间
表创建的时间。
更新时间
数据文件上次更新的时间。对于某些存储引擎,此值为
NULL
。例如,InnoDB
在其 系统表空间 中存储多个表,数据文件时间戳不适用。即使使用 每个表一个文件 模式,每个InnoDB
表都位于单独的.ibd
文件中,更改缓冲 可能会延迟写入数据文件,因此文件修改时间与上次插入、更新或删除的时间不同。对于MyISAM
,使用数据文件时间戳;但是,在 Windows 上,时间戳不会因更新而更新,因此该值不准确。Update_time
显示对未分区的InnoDB
表执行的最后一次UPDATE
、INSERT
或DELETE
的时间戳值。对于 MVCC,时间戳值反映COMMIT
时间,这被认为是最后更新时间。当服务器重新启动或表从InnoDB
数据字典缓存中清除时,时间戳不会被持久化。检查时间
表上次检查的时间。并非所有存储引擎都会更新此时间,在这种情况下,该值始终为
NULL
。对于已分区的
InnoDB
表,Check_time
始终为NULL
。排序规则
表默认排序规则。输出不会显式列出表默认字符集,但排序规则名称以字符集名称开头。
校验和
如果存在,则为实时校验和值。
创建选项
与
CREATE TABLE
一起使用的额外选项。对于分区表,
Create_options
显示partitioned
。如果表已加密或指定的加密与模式加密不同,则
Create_options
会显示每个表一个文件表空间的ENCRYPTION
子句。不会显示在一般表空间中创建的表的加密子句。要识别已加密的每个表一个文件表空间和一般表空间,请查询INNODB_TABLESPACES
的ENCRYPTION
列。在使用禁用 严格模式 的情况下创建表时,如果未指定的行格式不受支持,则会使用存储引擎的默认行格式。表的实际行格式将在
Row_format
列中报告。Create_options
将显示在CREATE TABLE
语句中指定的行格式。在更改表的存储引擎时,不适用于新存储引擎的表选项将保留在表定义中,以便在必要时使用以前定义的选项将表还原到原始存储引擎。
Create_options
可能会显示保留的选项。注释
创建表时使用的注释(或有关 MySQL 无法访问表信息的原因的信息)。
说明
对于
InnoDB
表,SHOW TABLE STATUS
不会提供准确的统计信息,除了表保留的物理大小。行计数只是 SQL 优化中使用的粗略估计。对于
NDB
表,此语句的输出将显示Avg_row_length
和Data_length
列的适当值,唯一的例外是BLOB
列不予考虑。对于
NDB
表,Data_length
包括仅存储在主内存中的数据;Max_data_length
和Data_free
列适用于磁盘数据。对于 NDB 集群磁盘数据表,
Max_data_length
显示为磁盘数据表或片段的磁盘部分分配的空间。(Data_length
列报告内存中数据资源的使用情况。)对于
MEMORY
表,Data_length
、Max_data_length
和Index_length
值近似于实际分配的内存量。分配算法会预留大量的内存,以减少分配操作的数量。对于视图,
SHOW TABLE STATUS
显示的大多数列均为 0 或NULL
,唯一的例外是Name
指示视图名称,Create_time
指示创建时间,Comment
为VIEW
。
表信息也可以从 INFORMATION_SCHEMA
TABLES
表中获取。请参阅 第 28.3.38 节“INFORMATION_SCHEMA TABLES 表”。