数据库索引为什么使用B+ Tree
索引是为了提高数据库的查询速度,相当于给数据进行编号,在查找数据的时候就可以通过编号快速找到对应的数据
实际用的数据结构用的是B+ Tree
主键自带索引
乱序插入数据,会自动按照id进行升序排列,这是因为主键自带索引,数据存储的内部结构类似于链表的形式,通过指针关联不同的数据
这种结构当数据量很大的时候查询还是很慢,MySQL如何解决?
MySQL中有一个page的概念,相当于给数据进行分页,把一部分数据存入一个page中,如下所示
每个page可以存储16KB的数据,这样就相当于给数据建立了上层目录,先找打目录,再找具体的数据,MySQL给page也提供了快速查询的page目录
把每个page中的第一条数据的id+指针存入page目录中,查询数据的时候,先找到它的page,在进入page中查找具体的数据
一个page目录中也可以存储16KB的数据,如果是海量数据,page目录也会有很多层,为了提高查询效率,MySQL给page目录再加一层目录,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLcXxBUQ-1615345497340)(https://gitee.com/Onlylmf/image/raw/master/img/image-20210310105630189.png)]
这种结构就是B+Tree
假设一条记录的空间32个byte,最底层一个单元可以存储数据16*1024/32=512
第二层只需要记录id+p, 假设是6个byte, 则可以保存的数据是16*1024/6=2730
第三层存储的数据16*1024/6=2730
即: 总共可以存储的数据是:512*2730*2730
/6=2730`
即: 总共可以存储的数据是:512*2730*2730