Skip to content
xiaoboluo768 edited this page Jun 7, 2020 · 2 revisions
  • 该表提供查询数据库内的表相关的基本信息
  • 该表为Memory引擎临时表
  • 表定义语句
CREATE TEMPORARY TABLE `TABLES` (
  `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
  `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
  `TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
  `ENGINE` varchar(64) DEFAULT NULL,
  `VERSION` bigint(21) unsigned DEFAULT NULL,
  `ROW_FORMAT` varchar(10) DEFAULT NULL,
  `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
  `AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
  `DATA_FREE` bigint(21) unsigned DEFAULT NULL,
  `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
  `CREATE_TIME` datetime DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL,
  `CHECK_TIME` datetime DEFAULT NULL,
  `TABLE_COLLATION` varchar(32) DEFAULT NULL,
  `CHECKSUM` bigint(21) unsigned DEFAULT NULL,
  `CREATE_OPTIONS` varchar(255) DEFAULT NULL,
  `TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8     
  • 表字段含义(该表中的字段从ENGINE开启,后续的字段都为 "MySQL extension" 列)
  • TABLE_SCHEMA:表示表所在的数据库名称
  • TABLE_NAME:表示表名称
  • TABLE_TYPE:表的类型,有效值为:SYSTEM VIEW(information_schema下的表都被归类为系统表)、BASE TABLE(用户自定义的持久表、mysql和performance_schema库下的所有表都被归类为基表)、VIEW(用户自定义视图和sys schema下的表),注意,在该表中不会记录临时表的信息
  • ENGINE:表示表引擎类型,注意:分区表的引擎会记录为建表语句中指定的引擎,但在之前的版本中,分区表的引擎被记录为"PARTTION"
  • VERSION:表示表定义.frm文件的版本号,代表表结构定义被修改过多少次
  • ROW_FORMAT:行存储格式,可能出现的值为:Fixed、Dynamic、Compressed、Redundant、Compact,对于myisam表,只支持Fixed、Dynamic两种(但在dynamic行格式时,myisamchk -dvv命令报告行格式为Packed),memory只支持Fixed一种,innodb引擎支持Dynamic、Compressed、Redundant、Compact四种(不支持Fixed)
  • TABLE_ROWS:表数据总行数,对于一些存储引擎(如MyISAM)该行数值是准确的计数(因为myisam表有行数据计数器,该值直接取计数器的值)。对于其他存储引擎,如InnoDB,此值是一个近似值,并且可能与实际值相差多达40%至50%。在这种情况下,请使用SELECT COUNT(*)来获取准确的计数 。对于performance_schema,则该字段为NULL
  • AVG_ROW_LENGTH:表中数据的行的平均数据行长度,可以使用Avg_row_length*Rows/表空间大小=表数据实际占用表空间大小,使用1减去这个值就等于表空间碎片率。如果太大时,可以使用optimize table tb_name语句来优化表,或者直接使用alter table tb_name engine=innodb语句来优化表。
  • DATA_LENGTH:数据总长度。对于MyISAM表,该字段代表数据文件的长度,以字节为单位。对于InnoDB表,该字段是指的聚集索引分配的内存数量近似值,以字节为单位。具体来说,它指的是聚集索引大小(以页为单位)乘以InnoDB page size的结果值
  • MAX_DATA_LENGTH:对于MyISAM表,Max_data_length是指的数据文件的最大长度。可以存储在表中的数据的字节总数。对于innodb表,并未使用该字段
  • INDEX_LENGTH:对于MyISAM表,该字段是指的索引文件的长度,以字节为单位。对于InnoDB表,该字段是指的非聚集索引分配的大概内存数量,以字节为单位。具体来说,它指的是非聚集索引大小(以页为单位)乘以InnoDB page size的结果值。
  • DATA_FREE:已分配但未使用的表空间字节数。对于 InnoDB表,报告表所属的表空间的可用空间。如果表使用共享表空间,这指的是共享表空间的可用空间大小。如果使用独立表空间,则可用空间指的该表的可用空间。可用空间表示完全可用区(extends)中的字节数减去安全余量。即使可用空间显示为0,也可以插入行,只要不需要分配新的区(extends)就允许插入操作。对于分区表,此值仅为估计值,可能不是绝对正确。在这种情况下获取此选项信息值的更准确的方法是查询INFORMATION_SCHEMA.PARTITIONS表,如:SELECT SUM(DATA_FREE) FROM ATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='mydb' AND TABLE_NAME ='mytable';
  • AUTO_INCREMENT:下一个AUTO_INCREMENT值
  • CREATE_TIME:创建表时间
  • UPDATE_TIME:上次更新数据文件时间。对于某些存储引擎,此值为NULL。例如,InnoDB在其共享表空间中存储多个表,数据更新不会更新数据文件时间戳。即使每个表使用独立表空间,每个InnoDB表在一个单独的.ibd文件中,change buffer可能会导致DML数据延迟写入数据文件,因此文件修改时间与上次插入,更新或删除的时间可能不同。对于MyISAM,数据更新会更新数据文件时间;但是,在Windows上,数据更新不会导致数据文件时间的更新,因此值不准确。注意:分区表的每个分区的更新该字段也会进行更新
  • CHECK_TIME:上次检查表时。并非所有存储引擎都会更新此时间,如果不检测表,则值始终为NULL,注意:分区表的记录中该字段总是为NULL
  • TABLE_COLLATION:表的字符集和排序规则
  • CHECKSUM:实时校验和值(如果表有使用值校验和功能)
  • CREATE_OPTIONS:与CREATE TABLE一起使用的额外建表选项,如果记录的表为分区表,则该字段值为"partitioned"
  • TABLE_COMMENT:创建表时使用的注释(或有关MySQL无法访问表信息的信息)
  • PS:
  • 在5.7.9版本中,引入了一个变量innodb_default_row_format来控制Innodb表的默认行格式,全局变量,动态变量,默认值为dynamic,枚举类型,有效值为:dynamic、compack、reduncant,compressed格式因为共享表空间不支持该行格式,所以该变量也不支持设置默认值为compressed。在innodb表创建时没有显式定义row_format或者定义的row_format=default时,会使用到该变量的默认值。注意:innodb内部临时表直接使用dynamic行格式创建,而不管该变量的值设置为多少。
  • 对于MEMORY表,DATA_LENGTH,MAX_DATA_LENGTH和INDEX_LENGTH值近似于所分配的内存存储的实际容量。分配算法可以减少分配操作的次数
  • 对于NDB表,此语句的输出显示AVG_ROW_LENGTH和DATA_LENGTH列的确切值,但不包括BLOB列
  • 对于视图,SHOW TABLE STATUS显示的所有字段都为NULL,除了Name表示视图名称和Comment表示视图注释外
  • 表记录内容示例
admin@localhost : information_schema 06:15:49> select * from TABLES where TABLE_NAME='sbtest1'\G;
*************************** 1. row ***************************
  TABLE_CATALOG: def
  TABLE_SCHEMA: sbtest
    TABLE_NAME: sbtest1
    TABLE_TYPE: BASE TABLE
        ENGINE: InnoDB
        VERSION: 10
    ROW_FORMAT: Dynamic
    TABLE_ROWS: 4392380
AVG_ROW_LENGTH: 233
    DATA_LENGTH: 1027604480
MAX_DATA_LENGTH: 0
  INDEX_LENGTH: 97140736
      DATA_FREE: 50331648
AUTO_INCREMENT: 10730975
    CREATE_TIME: 2017-09-05 18:58:33
    UPDATE_TIME: NULL
    CHECK_TIME: NULL
TABLE_COLLATION: utf8_bin
      CHECKSUM: NULL
CREATE_OPTIONS: max_rows=1000000
  TABLE_COMMENT: 
1 row in set (0.00 sec)
  • PS:该表中的信息还可以使用show语句查询
root@localhost : information_schema 11:33:23> show table status from sbtest where name = 'sbtest1'\G;
*************************** 1. row ***************************
          Name: sbtest1
        Engine: InnoDB
        Version: 10
    Row_format: Dynamic
          Rows: 7522488
Avg_row_length: 227
    Data_length: 1713373184
Max_data_length: 0
  Index_length: 158089216
      Data_free: 3145728
Auto_increment: 16790458
    Create_time: 2018-01-14 16:18:34
    Update_time: NULL
    Check_time: NULL
      Collation: utf8_bin
      Checksum: NULL
Create_options: max_rows=1000000
        Comment: 
1 row in set (0.00 sec)

# 或者使用like子句
show table status from sbtest like 'sbtest1';

上一篇:STATISTICS表 |下一篇:TABLESPACES表

Clone this wiki locally