衍变
二叉树
二叉查找树(容易形成链表)
二叉平衡树(可以自动调整高度,但层数容易过高)
多路平衡查找树即B树(层数控制了,但每个节点存有数据,导致每个磁盘页存不了多少索引,导致层数升高)
传统加强版多路平衡查找树即B+树(每个磁盘页可以存更多索引,进一步控制了层数,但最底层是单向链表)
innodb的B+树(叶子节点是双向链表,提升了范围查找与排序效率)
索引是啥
一种为了使查找方便而 排好序 的数据结构
查找需要几次磁盘io呢
查找索引为30的数据

1)先将B+数的根节点加载进内存中,发生了一次io;
2)30大于15,小于56,找到了30所在的磁盘页地址,再次加载进内存,发生了第二次io;
3)30大于20小于49,进一步找到了30所在磁盘页地址,再次加载进内存,发生了第三次io;
4)最后找到了索引为30所在地址及其数据;
通常根节点会常驻内存
B+树与页的关系

一页的大小是16384个字节,即16kb,可以通过执行show global status like ‘Innodb_page_size’来查看,此值可以改,但不推荐。为啥是16kb呢,试想若一页设定为非常大,即一页存放所有数据,只经过一次io就将数据加载进内存,对内存压力很大,而且一次io加载几百兆,甚至更多,也弄不了那么多,时间也长。

本文深入探讨MySQL的演变,重点解析B+树索引的原理,包括磁盘IO次数、页的关系、数据结构区别。对比B树与B+树,分析MyISAM与InnoDB的底层差异,强调主键与非主键索引的存储方式,解释覆盖索引的概念及其重要性。建议使用整型自增主键以优化索引构建效率。
3898

被折叠的 条评论
为什么被折叠?



