InnoDB 层系统字典表 | 全方位认识 information_schema

《Server 层混杂信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema下的状态变量、系统变量、进程状态、字符集和校对规则等字典表,本期我们将为大家带来系列第五篇《InnoDB 层系统字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema 系统库的系统学习之旅吧。

 

1、INNODB_SYS_DATAFILES

该表提供查询InnoDB file-per-table和常规表空间数据文件的路径信息,等同于InnoDB数据字典中SYS_DATAFILES表中的信息

  • 该表为memory引擎临时表,查询该表的用户需要有process权限

  • 该表中的信息包含InnoDB所有表空间类型的元数据,包括独立表空间、常规表空间、系统表空间、临时表空间和undo表空间(如果开启了独立表空间的话)

下面是该表中存储的信息内容

admin@localhost : information_schema 06:26:55> select * from INNODB_SYS_DATAFILES limit 5;
+-------+---------------------------+
| SPACE | PATH                      |
+-------+---------------------------+
|    6 | ./mysql/plugin.ibd        |
|    7 | ./mysql/servers.ibd      |
|    8 | ./mysql/help_topic.ibd    |
|    9 | ./mysql/help_category.ibd |
|    10 | ./mysql/help_relation.ibd |
+-------+---------------------------+
5 rows in set (0.00 sec)

字段含义如下:

  • SPACE:表空间文件ID

  • PATH:表空间数据文件所在路径。如果独立表空间文件在MySQL数据目录中,则该路径为一个相对路径,如果在MySQL数据目录之外,则该路径值为一个绝对路径

 

2、INNODB_SYS_VIRTUAL

该表提供查询有关InnoDB虚拟生成列和与之关联的列的元数据信息,等同于InnoDB数据字典中SYS_VIRTUAL表中的信息

  • INNODB_SYS_VIRTUAL表中展示的行信息是虚拟生成列相关联列的每个列的信息

  • 该表为memory引擎临时表,查询该表的用户需要有process权限

下面是该表中存储的信息内容

# 建表
root@localhost : (none) 01:03:42> use test
Database changed
root@localhost : test 01:13:25> CREATE TABLE `t1` (
->          `a` int(11) DEFAULT NULL,
->          `b` int(11) DEFAULT NULL,
->          `c` int(11) GENERATED ALWAYS AS (a+b) VIRTUAL,
->          `h` varchar(10) DEFAULT NULL
->        );
Query OK, 0 rows affected (0.10 sec)

# 查询INNODB_SYS_VIRTUAL表
root@localhost : test 01:13:28> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_VIRTUAL
->        WHERE TABLE_ID IN (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE "test/t1");
+----------+-------+----------+
| TABLE_ID | POS   | BASE_POS |
+----------+-------+----------+
|      487 | 65538 |        0 |
|      487 | 65538 |        1 |
+----------+-------+----------+
2 rows in set (0.00 sec)

# 如果将常量值分配给虚拟生成列(如以下示例中所示),则此时该列不会在INNODB_SYS_VIRTUAL表中记录(虚拟生成列必须是一个表达式在该表中才会进行记录)
root@localhost : test 01:13:42> CREATE TABLE `t2` (
->          `a` int(11) DEFAULT NULL,
->          `b` int(11) DEFAULT NULL,
->          `c` int(11) GENERATED ALWAYS AS (5) VIRTUAL
->        );
Query OK, 0 rows affected (0.04 sec)

root@localhost : test 01:15:56> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_VIRTUAL WHERE TABLE_ID IN (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE "test/t2");
Empty set (0.00 sec)

# 虽然在innodb_sys_virtual表中未记录,但是此类列信息记录到了innodb_sys_columns表中
root@localhost : (none) 01:22:53> select c.* from information_schema.innodb_sys_tables as t join information_schema.innodb_sys_columns as c on t.table_id=c.table_id where t.name='test/t2';
+----------+------+-------+-------+--------+-----+
| TABLE_ID | NAME | POS   | MTYPE | PRTYPE | LEN |
+----------+------+-------+-------+--------+-----+
|      488 | a    |     0 |     6 |   1027 |   4 |
|      488 | b    |     1 |     6 |   1027 |   4 |
|      488 | c    | 65538 |     6 |   9219 |   4 |
+----------+------+-------+-------+--------+-----+
3 rows in set (0.00 sec)

字段含义如下:

  • TABLE_ID:表示与虚拟列关联的表ID,与INNODB_SYS_TABLES.TABLE_ID字段值相同

  • POS:虚拟生成列的位置顺序值。该数字较大,因为它同时编码了列序号和序号位置。且用于计算该值的公式使用了位移运算。公式为:((InnoDB实例的第n个虚拟生成列+ 1) << 16)+虚拟生成列的顺序位置值。例如:如果InnoDB实例中的第一个虚拟生成列是该表的第三列,则公式为(0 + 1)<< 16)+ 2

  • BASE_POS:虚拟生成列的关联列的顺序位置

 

3、INNODB_SYS_INDEXES

该表提供查询有关InnoDB索引的元数据信息,等同于InnoDB数据字典内部SYS_INDEXES表中的信息

  • 该表为memory引擎临时表,查询该表的用户需要具有process权限

下面是该表中存储的信息内容

admin@localhost : information_schema 06:39:20> select * from INNODB_SYS_INDEXES limit 1\G;
*************************** 1. row ***************************
  INDEX_ID: 11
      NAME: ID_IND
  TABLE_ID: 11
      TYPE: 3
  N_FIELDS: 1
    PAGE_NO: 45
      SPACE: 0
MERGE_THRESHOLD: 50
1 row in set (0.00 sec)

字段含义如下:

  • INDEX_ID:索引ID,在实例中的所有数据库中唯一

  • NAME:索引名称。索引名称可以在创建时指定,如果不指定InnoDB将隐含地创建名称与列名一致的索引,但索引名称在整个实例中不一定是唯一的(但在每个表中需要唯一)。例如:PRIMARY用于主键索引、GEN_CLUST_INDEX用于表示未指定主键时innodb隐式创建的一个主键索引、以及ID_IND,FOR_IND和REF_IND用于外键约束等

  • TABLE_ID:表示与索引关联的表ID,该字段值与INNODB_SYS_TABLES.TABLE_ID的字段值相同

  • TYPE:表示索引类型的数字ID,0 =二级索引、1 =集群索引、2 =唯一索引、3 &

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值