加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

有关MYSQL INNODB index page header学习和实验归总

发布时间:2022-03-23 04:24:27 所属栏目:MySql教程 来源:互联网
导读:关于INNODB index header 普通表空间(及设置了innodb_file_per_table每个表都对应一个idb文件)从第4个块开始通常是innodb的数据页。 前38字节为FILE HEADER 从38字节到74字节为INDEX HEADER,如下: 接下来分析我设置了innodb_file_per_table create table
      关于INNODB  index header
  
     普通表空间(及设置了innodb_file_per_table每个表都对应一个idb文件)从第4个块开始通常是innodb的数据页。
     前38字节为FILE HEADER
      从38字节到74字节为INDEX HEADER,如下:
 
接下来分析我设置了innodb_file_per_table
create table km1(id int ,name varchar(20));
insert into km1 values(1,'gaopeng');
insert into km1 values(2,'gaopeng');
insert into km1 values(3,'gaopeng');
insert into km1 values(4,'gaopeng');
  
 
      我这里数据很少,值有3条,所以一共就只有6个块,块3就是数据块(0 开始)使用
 
1、number of directory slot
bcview km1.ibd 16 38 2|more
current block:00000003--Offset:00038--cnt bytes:02--data is:0002
这里有一个槽的概念,他实际上是用于更快的定位数据,以后的文章会更加细节的研究学习
 
2、heap top position
bcview km1.ibd 16 40 2|more
current block:00000003--Offset:00040--cnt bytes:02--data is:010c
表明记录的最高为出现在偏移量10c,及十六进制的268
 
3、number of heap records/format flag
 
bcview km1.ibd 16 42 2|more
current block:00000003--Offset:00042--cnt bytes:02--data is:8006
这里8006十六进制,就说明是compact模式的行记录,如果使用Redundant我们看看
 create table km3 (id int,name varchar(20)) ROW_FORMAT = Redundant;
current block:00000003--Offset:00042--cnt bytes:02--data is:0002
可以看到这里第15为为0,说明是Redundant格式
而我们的行记录是6,明明只是插入了4条记录为什么是6呢,其实MYSQL的每个块里面有
2个虚拟列infimum 和supremum,他们都在固定的位置,而 infimum指向了第一条记录的
offset,而最后一条记录的offset表示为supremum的offset,这样形成了行记录的一个
单项链表。
4、first garbage record offset
bcview km1.ibd 16 44 2|more
current block:00000003--Offset:00044--cnt bytes:02--data is:0000
为0,如果说明没有删除的记录,如果此时我们来delete 2条记录
delete from km1 where id in (1,3);
(由于bcview为基于文件的工具,修改的数据脏数据卸载buffer中,所以我重启了一次数据才能看到)
再次查看
current block:00000003--Offset:00044--cnt bytes:02--data is:00c9
看到这里为c9及offset 201
 
 bcview km4.ibd 16 46 2|more
current block:00000003--Offset:00046--cnt bytes:02--data is:003
这里3e是十进制62,74-62=12 刚好6字节证明了我的说法。
还要注意一点:如果建表的时候没有加入主键,插入数据后加入,这每行6字节的开销也是有的,所以建表的时候尽量要加主键。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读