Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  SHOW TABLE STATUS Statement

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 EngineChapter 18, Alternative Storage Engines

    对于分区表,Engine显示了所有分区使用的存储引擎名称。

  • Version

    该列当前无用。从MySQL 8.0开始,.frm文件被删除,该列现在报告了一个固定的值10,这是MySQL 5.7中最后一个.frm文件版本。

  • Row_format

    行存储格式(FixedDynamicCompressedRedundantCompact)。对于MyISAM表,Dynamic对应于myisamchk -dvv报告的Packed

  • Rows

    行数。某些存储引擎,如MyISAM,存储确切的计数。其他存储引擎,如InnoDB,该值是一个近似值,可能与实际值相差40%到50%。在这种情况下,使用SELECT COUNT(*)来获取准确的计数。

    对于INFORMATION_SCHEMA表,Rows值为NULL

    对于InnoDB表,行数只是SQL优化的粗略估计。 (这也适用于InnoDB表,如果该表已分区。)

  • Avg_row_length

    平均行长。

  • Data_length

    对于MyISAMData_length是数据文件的长度,单位为字节。

    对于InnoDBData_length是近似估算的索引空间,单位为字节。具体来说,它是聚簇索引大小,单位为页面,乘以InnoDB页面大小。

    请查看本节末尾的注释,以获取其他存储引擎的信息。

  • Max_data_length

    对于MyISAMMax_data_length是数据文件的最大长度。该值是数据指针大小所确定的表中可以存储的数据总量,单位为字节。

    不适用于InnoDB

    请查看本节末尾的注释,以获取其他存储引擎的信息。

  • Index_length

    对于MyISAMIndex_length是索引文件的长度,单位为字节。

    对于InnoDBIndex_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';

    更多信息,请查看第28.3.21节,“INFORMATION_SCHEMA PARTITIONS Table”

  • Auto_increment

    下一个AUTO_INCREMENT值。

  • Create_time

    创建表的时间。

  • Update_time

    数据文件的最后更新时间。某些存储引擎中,这个值为NULL。例如,InnoDB将多个表存储在其系统表空间中,并且数据文件的时间戳不适用。即使在文件-per-table模式下,每个InnoDB表在单独的.ibd文件中,更改缓冲可以延迟写入数据文件,因此文件修改时间不同于最后的插入、更新或删除时间。对于MyISAM,数据文件时间戳被使用;然而,在Windows上,时间戳不更新,因此值不准确。

    Update_time显示最后一个UPDATEINSERTDELETE操作的时间戳,对于非分区的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表,输出语句显示适当的值Avg_row_lengthData_length列,除非BLOB列不被考虑。

  • 对于NDB表,Data_length只包括在主内存中存储的数据。Max_data_lengthData_free列适用于磁盘数据。

  • 对于 NDB Cluster 磁盘数据表,Max_data_length显示磁盘部分的空间分配(内存数据资源使用由Data_length列报告)。

  • 对于MEMORY表,Data_lengthMax_data_lengthIndex_length值近似实际分配的内存。分配算法预留大量内存以减少分配操作的次数。

  • 对于视图,SHOW TABLE STATUS大多数列显示为 0 或NULL,except Name 表示视图名称、Create_time 表示创建时间和Comment 表示VIEW

表信息也可以从INFORMATION_SCHEMA TABLES 表中获取。见Section 28.3.38, “The INFORMATION_SCHEMA TABLES Table”