mysql的InnoDB存储引擎的索引底层就是B+树,用一个页作为一个叶子节点
B+树特点:排序(左小右大),叶子节点有指针(双向),非叶子节点的数据都冗余了一份在叶子节点,一个节点有多个元素
InnoDB页
详解
https://blog.csdn.net/weixin_26786277/article/details/113121272
概念
页是InnoDB最小的存储单位,16KB。
InnoDB是一个存储引擎,也就是一个程序,他主要负责存数据,取数据。主要是和磁盘打交道。在InnoDB里面向磁盘里面写数据,取数据,操作的都是一页数据(16kB)。
why?
如果我们不考虑页,假设表里有八条数据(1,2... 8),这八条数据肯定是在磁盘里面,我们执行select * from table where id = 7; 我们就要从磁盘数据中取出第一行数据id =1,判断不等于在取,id=2不等于在取,直到找到id =7,进行了7次磁盘IO,速度会很慢。所以我们要进行优化,使用页数据,这样我们在去取数据的时候,逻辑还是一样的,我们还是取第一行数据,第一行数据不足16kb,但是我们取数据最小单位是页,所以我们会把整条表的数据全部取出来(只要没有超过16KB),把他们放在内存中,这样的话我们磁盘IO只进行了一次,其他的操作都是在内存中,减少了磁盘IO。
内部结构
注意,假如我们有六条数据,无序进行插入,第一页(1,3,5,6)已经满了,我们在插入新数据的时候就要新增一页,我们插入4,这时候这个4还是插入在第一页,因为按照主键自增的原则排序,但是第一页已经满了,所以我们要把6移动到第二页中,插入2,就要再次进行改动,这样效率慢,性能高。所以我们不建议用UUID作为主键,因为它很长占空间,并且无序。
mysql中就是用一个页作为一个叶子节点
B+树特点:排序(左小右大),叶子节点有指针(双向),非叶子节点的数据都冗余了一份在叶子节点,一个节点有多个元素
我们所看到的这个B+树其实和主键的关系比较大,完全是按照主键的排序一步一步形成的。所以这个B+树就是我们所说的主键索引.
索引就是一个B+树,主键索引就是按照主键排序所生成出来的一个B+树。并且叶子节点存的是我们整张表的数据 。非叶子节点 --- 索引页,叶子节点 ---- 数据页
select * from table where id =5;
走索引:从上往下,利用了索引页,加快了查询速度。 全表扫描:叶子节点从头开始遍历
标签:节点,叶子,索引,详解,Mysql,磁盘,数据,主键 From: https://www.cnblogs.com/zhuyilong/p/17058840.html