SHOW TABLE STATUS
[{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
复制
SHOW TABLE STATUS 的工作方式类似于 SHOW TABLES,提供了关于每个非临时表的大量信息。还可以使用 mysqlshow --status db_name 命令获取此信息清单。LIKE 子句(如果存在)指示要匹配的表名。可以用 WHERE 子句来添加更通用的条件选择行。SHOW TABLE STATUS 的输出包含以下列:对于分区表,引擎显示所有分区使用的存储引擎的名称。此列未使用。随着 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。对于 InnoDB 表,行数只是 SQL 优化中使用的粗略估计。(如果对 InnoDB 表进行分区,也是如此。)对于 MyISAM,Data_length 是以字节为单位的数据文件长度。对于 InnoDB,Data_length 是为聚集索引分配的近似空间大小,以字节为单位。具体来说,它是聚集索引大小(以页为单位)乘以 InnoDB 页大小。对于 MyISAM,Index_length 是索引文件的长度,以字节为单位。对于 InnoDB,Index_length 是为非聚集索引分配的空间的近似大小,以字节为单位。具体来说,它是非聚集索引大小的总和,以页为单位,乘以 InnoDB 页面大小。InnoDB 表报告表所属表空间的可用空间。对于位于共享表空间中的表,是共享表空间的可用空间。如果使用多个表空间,并且该表有自己的表空间,则可用空间仅用于该表的表空间。可用空间是指完全可用的字节数减去安全边界。即使可用空间显示为 0,只要不需要分配新的空间,就可以插入新行。对于 NDB Cluster,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';
复制
上次更新数据文件的时间。对于某些存储引擎,此值为 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。在 MySQL 8.0.16 之前,Create_options 显示为在独立表空间中创建的表指定的 ENCRYPTION 子句。从 MySQL 8.0.16 开始,如果表是加密的,或者指定的加密与模式加密不同,那么它将为独立表空间显示加密子句。对于在常规表空间中创建的表,不会显示加密子句。要辨别加密的独立表空间和常规表空间,请查询 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 列适用于 Disk Data。对于 NDB Cluster Disk Data 表,Max_data_length 显示为 Disk Data 表或碎片的磁盘部分分配的空间。(内存中的数据资源使用情况由 Data_length 列展示。)对于 MEMORY 表,Data_length、Max_data_length 和 Index_length 值近似于实际分配的内存量。分配算法保留大量内存,以减少分配操作的次数。对于视图,SHOW TABLE STATUS 显示的大多数列都是 0 或 NULL,但 Name 显示视图名称,Create_time 表示创建时间,Comment 显示 VIEW。表信息也可以从 INFORMATION_SCHEMA TABLES 表中获得。https://dev.mysql.com/doc/refman/8.0/en/show-table-status.html