-
Notifications
You must be signed in to change notification settings - Fork 111
TABLES
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表
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!