-
Notifications
You must be signed in to change notification settings - Fork 111
INNODB_SYS_TABLES
xiaoboluo768 edited this page Jun 7, 2020
·
2 revisions
- 该表提供查询有关InnoDB表的元数据,等同于InnoDB数据字典中SYS_TABLES表的信息
- 该表为memory引擎临时表,查询该表的用户需要有process权限
- 表定义语句
CREATE TEMPORARY TABLE `INNODB_SYS_TABLES` (
`TABLE_ID` bigint(21) unsigned NOT NULL DEFAULT '0',
`NAME` varchar(655) NOT NULL DEFAULT '',
`FLAG` int(11) NOT NULL DEFAULT '0',
`N_COLS` int(11) NOT NULL DEFAULT '0',
`SPACE` int(11) NOT NULL DEFAULT '0',
`FILE_FORMAT` varchar(10) DEFAULT NULL,
`ROW_FORMAT` varchar(12) DEFAULT NULL,
`ZIP_PAGE_SIZE` int(11) unsigned NOT NULL DEFAULT '0',
`SPACE_TYPE` varchar(10) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
- 表字段含义
- TABLE_ID:Innodb表ID,在整个实例中唯一
- NAME:表名称。该字符串包含db_name+tb_name,例如"test/t1",该字符串值可能受lower_case_table_names系统参数设置的影响
- FLAG:有关表格式和存储特性的位级信息数据,包括行格式,压缩页大小(如果适用)以及DATA DIRECTORY子句是否与CREATE TABLE或ALTER TABLE一起使用等
- N_COLS:表中的列数量。该字段值包含了Innodb表的三个隐藏列(DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR),另外,如果存在虚拟生成列,则该字段值还包含虚拟生成列
- SPACE:表所在表空间ID。0表示InnoDB系统表空间。任何其他非0数字独立表空间或普通表空间。该ID值在执行过TRUNCATE TABLE语句后保持不变。对于每个表的表空间ID记录,在此表中的ID值是唯一的
- FILE_FORMAT:表空间文件的存储格式(有效值为:Antelope、Barracuda)
- ROW_FORMAT:表的数据行存储格式(有效值为:Compact,、Redundant,、Dynamic、Compressed)
- ZIP_PAGE_SIZE:压缩页大小。仅适用于使用压缩行格式的表
- SPACE_TYPE:表所属的表空间类型。可能的值包括:System(系统表空间)、General(普通表空间)、Single(独立表空间)、使用CREATE TABLE或ALTER TABLE 语句时使用TABLESPACE建表选项指定表空间名称,例如:TABLESPACE = innodb_system,表示分配该表到系统表空间,如果需要指定到一个普通表空间(针对NDB存储引擎适用),详情参考链接:https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html
- 表记录内容示例
root@localhost : (none) 12:53:44> select * from information_schema.INNODB_SYS_TABLES where NAME like 'sbtest%';
+----------+-------------------+------+--------+-------+-------------+------------+---------------+------------+
| TABLE_ID | NAME | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE |
+----------+-------------------+------+--------+-------+-------------+------------+---------------+------------+
| 323 | sbtest/sbtest1 | 33 | 7 | 151 | Barracuda | Dynamic | 0 | Single |
| 318 | sbtest/sbtest2 | 33 | 7 | 146 | Barracuda | Dynamic | 0 | Single |
| 320 | sbtest/sbtest3 | 33 | 7 | 148 | Barracuda | Dynamic | 0 | Single |
| 321 | sbtest/sbtest4 | 33 | 7 | 149 | Barracuda | Dynamic | 0 | Single |
| 325 | sbtest/sbtest5 | 33 | 7 | 153 | Barracuda | Dynamic | 0 | Single |
| 322 | sbtest/sbtest6 | 33 | 7 | 150 | Barracuda | Dynamic | 0 | Single |
| 324 | sbtest/sbtest7 | 33 | 7 | 152 | Barracuda | Dynamic | 0 | Single |
| 319 | sbtest/sbtest8 | 33 | 7 | 147 | Barracuda | Dynamic | 0 | Single |
| 347 | sbtest/test_table | 33 | 4 | 295 | Barracuda | Dynamic | 0 | Single |
+----------+-------------------+------+--------+-------+-------------+------------+---------------+------------+
9 rows in set (0.00 sec)
- PS:flag列bit位值解释
- 详见链接:https://dev.mysql.com/doc/refman/5.7/en/innodb-sys-tables-table.html
- 链接中的表格查看方法:例如flag列值为33,则在"Decimal Numeric Value" 列表示的十进制数字中,找到存在32与1的值的行,即第一行 和第三行,然后,从这两行的"Description"列的解释我们可以得出,该表的行存储格式要么为Dynamic要么为Compressed,而从ZIP_PAGE_SIZE 列值我们可以看到该表是否有使用压缩格式,从而可以进一步确定该表到底使用的何种行存储格式(当然,这个值对于一般使用者并无多大用处,了解即可)
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!