15.7.7.37 显示表状态语句
SHOW TABLE STATUS
[{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
SHOW TABLE STATUS类似于SHOW TABLES, 但提供了每个非临时表的详细信息。您也可以使用mysqlshow --status db_name命令获取该列表。WHERE子句,如果存在,用于选择要匹配的表名。LIKE子句,如果存在,用于选择要匹配的表名。WHERE子句可以用于选择行使用更一般的条件,详见Section 28.8, “Extensions to SHOW Statements”。
该语句还显示了视图的信息。
SHOW TABLE STATUS输出具有以下列:
-
Name表的名称。
-
Engine表的存储引擎。详见Chapter 17, The InnoDB Storage Engine和Chapter 18, Alternative Storage Engines。
对于分区表,
Engine显示了所有分区使用的存储引擎名称。 -
Version该列当前无用。从MySQL 8.0开始,
.frm文件被删除,该列现在报告了一个固定的值10,这是MySQL 5.7中最后一个.frm文件版本。 -
Row_format行存储格式(
Fixed,Dynamic,Compressed,Redundant,Compact)。对于MyISAM表,Dynamic对应于myisamchk -dvv报告的Packed。 -
Rows行数。某些存储引擎,如
MyISAM,存储确切的计数。其他存储引擎,如InnoDB,该值是一个近似值,可能与实际值相差40%到50%。在这种情况下,使用SELECT COUNT(*)来获取准确的计数。对于
INFORMATION_SCHEMA表,Rows值为NULL。 -
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表报告的是该表所属的表空间中的空闲空间。如果该表位于共享表空间中,这是共享表空间中的空闲空间。如果您使用多个表空间且该表有自己的表空间,那么空闲空间是该表的表空间中的空闲空间。空闲空间是指完全空闲的extent数量减去安全边距。即使空闲空间显示为0,也可能可以插入行,只要新extent不需要分配。对于NDB集群,
Data_free显示的是磁盘上用于但未使用的Disk Data表或碎片的空间大小。 (内存数据资源使用情况由Data_length列报告。)对于分区表,这个值可能不准确。为了获取更准确的信息,可以查询
INFORMATION_SCHEMAPARTITIONS表,例如:SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable'; -
Auto_increment下一个
AUTO_INCREMENT值。 -
Create_time创建表的时间。
-
Update_time数据文件的最后更新时间。某些存储引擎中,这个值为
NULL。例如,InnoDB将多个表存储在其系统表空间中,并且数据文件的时间戳不适用。即使在文件-per-table模式下,每个InnoDB表在单独的.ibd文件中,更改缓冲可以延迟写入数据文件,因此文件修改时间不同于最后的插入、更新或删除时间。对于MyISAM,数据文件时间戳被使用;然而,在Windows上,时间戳不更新,因此值不准确。Update_time显示最后一个UPDATE、INSERT或DELETE操作的时间戳,对于非分区的InnoDB表。对于MVCC,时间戳反映了COMMIT时间,这被认为是最后的更新时间。时间戳在服务器重启或表被从InnoDB数据字典缓存中移除时不被持久化。 -
Check_time表的最后检查时间。不是所有存储引擎都更新这个时间,在这种情况下,值总是
NULL。对于分区的
InnoDB表,Check_time总是NULL。 -
Collation表的默认排序规则。输出不显示表的默认字符集,但是排序规则名称以字符集名称开头。
-
Checksum如果存在的live checksum值。
-
Create_options与
CREATE TABLE一起使用的额外选项。Create_options显示partitioned的partitioned表。Create_options显示CREATE TABLE中的加密子句,如果表是加密的或指定的加密与架构加密不同。加密子句不显示在通用表空间中创建的表中。要确定加密的文件-per-table和通用表空间,查询INNODB_TABLESPACES中的加密列。在禁用严格模式时,创建表时使用存储引擎的默认行格式,如果指定的行格式不受支持。表的实际行格式在
Row_format列中报告。Create_options显示在CREATE TABLE语句中指定的行格式。当更改表的存储引擎时,表选项将保留在表定义中,以便在必要时将表还原到原来的存储引擎。
Create_options可能显示保留的选项。 -
Comment创建表时使用的注释(或 MySQL 无法访问表信息的原因)。
-
对于InnoDB表,
SHOW TABLE STATUS不提供准确的统计信息,除了表的物理大小。行数仅用于 SQL 优化的粗略估算。 -
对于NDB表,
Data_length只包括在主内存中存储的数据。Max_data_length和Data_free列适用于磁盘数据。 -
对于 NDB Cluster 磁盘数据表,
Max_data_length显示磁盘部分的空间分配(内存数据资源使用由Data_length列报告)。 -
对于MEMORY表,
Data_length、Max_data_length和Index_length值近似实际分配的内存。分配算法预留大量内存以减少分配操作的次数。 -
对于视图,
SHOW TABLE STATUS大多数列显示为 0 或NULL,exceptName表示视图名称、Create_time表示创建时间和Comment表示VIEW。
表信息也可以从INFORMATION_SCHEMA TABLES 表中获取。见Section 28.3.38, “The INFORMATION_SCHEMA TABLES Table”。