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_SCHEMA
PARTITIONS
表,例如: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”。