MySQL中的 SHOW TABLE STATUS 的使用

MySQL中的 SHOW TABLE STATUS 的使用

说明

该SQL输出提供了很多关于每个非临时表的信息。您还可以使用mysqlshow --status db_name命令获取此列表。如出现类似子句,指示要匹配的表名。可以使用where子句使用更一般的条件来选择行,此语句还显示有关视图的信息。

语法格式

SHOW TABLE STATUS
    [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]
-- 参数:[FROM db_name] 可选,表示查询哪个数据库下面的表信息。 
-- [LIKE 'pattern'] 可选,表示查询哪些具体的表名。    

输出信息及解释

  • Name
    表名。

  • Engine:
    表的存储引擎。旧版本中,叫Type。

  • Version:
    表的版本号

  • Row_format

    行存储格式(Fixed,Dynamic,Compressed,Redundant,Compact)。对于MyISAM表,动态对应于myisamchk报告打包的内容。使用Antelope文件格式时,InnoDB表格式要么是Redundant的,要么是Compact的,要么使用Barracuda文件格式Compressed或Dynamic。

    动态行的行长度可变,例如Varchar或Blob类型字段。固定行是指行长度不变,例如Char和Integer类型字段。Compressed的行则只在压缩表中存在

  • Rows
    表中的行数。一些存储引擎,如MyISAM,存储精确计数。对于其他存储引擎,如InnoDB,这个值是近似值,并且可能与实际值不同多达40%至50%。在这种情况下,使用选择count(*)来获取精确计数。

  • 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表表示表所属的表空间的空闲空间。对于位于共享表空间中的表,这是共享表空间的空闲空间。如果您使用多个表空间,并且表有自己的表空间,那么唯一的空间仅为该表。
    Data_free意味着字节数在完全自由范围内减去安全裕度。即使Data_free显示为0,只要不需要分配新的区段,就可能插入行。对于NDB集群,data_free显示磁盘上分配的磁盘数据表或磁盘上的磁盘数据表或片段所分配的空间。(Data_length列表示内存数据资源使用情况)。

    对于分区表,此值只是估计值,并且可能不是绝对正确的。在这种情况下获取此信息的方法更准确,就是查询INFORMATION_SCHEMA分区表,如本示例所示:

    SELECT SUM(DATA_FREE)
        FROM  INFORMATION_SCHEMA.PARTITIONS
        WHERE TABLE_SCHEMA = 'mydb'
        AND   TABLE_NAME   = 'mytable';
    
  • Auto_increment
    下一个Auto_increment的值

  • Create_time
    表的创建时间,分区表是NULL

  • Update_time

    表的最近更新时间。对于某些存储引擎来说,此值为null。例如,InnoDB在其系统表空间中存储多个表,并且数据文件时间戳不适用。即使使用file-per-table模式与每个InnoDB表在单独的.ibd文件中,更改缓冲可以将写入延迟到数据文件,因此文件修改时间不同于上次插入、更新或删除时间。对于MyISAM,使用了数据文件时间戳;但是,在windows上,时间戳不会更新,因此值是不准确的。分区表是NULL。

  • Check_time

    表上次检查的时间。并非所有存储引擎都更新了这个时间,在这种情况下,值总是空的。
    对于分区的InnoDB表,check_time始终为null。

    使用 check table 或myisamchk工具检查表的最近时间

  • Collation
    表的默认字符集和字符排序规则

  • Checksum
    如果有的话,则会返回一个实际校验值。

  • Create_options

    Create_options显示分区表的分区。
    当创建strict模式禁用的表时,如果不支持指定行格式,则使用存储引擎的默认行格式。
    表中的实际行格式是在row_format列中显示的。Create_options显示了在create表语句中指定的行格式。

    更改表的存储引擎时,表定义中保留了不适用于新存储引擎的表选项,以便在必要时启用将表与先前定义的选项还原到原始存储引擎中。Create_options可能显示保留选项。

    指表创建时的其他所有选项

  • Comment
    创建表时使用的注释(或关于为什么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列显示内存数据资源使用情况)。
  • 对于内存表来说,data_length、max_data_length和index_length值近似于实际分配内存的数量。分配算法保留内存大量减少分配操作的数量。
  • 对于视图,显示表状态显示的所有列都为null,除非该名称指示视图名称和注释表示视图。

翻译自MySQL官方手册

你可能感兴趣的:(mysql)