模拟B+Tree的数据结构,非常好: https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
一、B+Tree
B指的是balance(平衡)
二、节点、叶子节点的概念,下图是二叉树的图,不是N叉数的图:
节点:
就是一个图中的0、1、2~~14,这些就叫节点。
叶子节点:
就是没有子节点的节点,比如图中的7、8、9~~14这些,0、1、2、3这些就不是叶子节点。
三、
四、根据索引查找的时候是按照折半原理查找,也就是二分查找,这样查找速度就会很快
五、InnoDB普通索引查找方式
B树结构:
六、为什么索引用B+树,而不用B树呢?
因为B+树的非叶子节点上不存储数据,所以能够最大程度上存放索引【一个节点大概能够存放16KB的数据】,减小树的高度,减小磁盘IO;用B树的话,会增加树的高度,增加磁盘IO,查询速度变慢。
MySql默认一个节点的长度为16K,一个整数(bigint)字段索引的长度为 8B,另外每个索引还跟着6B的指向其子树的指针;所以16K/14B ≈ 1170,例5中20-30算一个节点。
七、
例子:
八、
1、B树原理
2、B树和B+树的区别
3、B+树原理
3、索引的创建和存储引擎是挂钩的,存储引擎表示不同的数据在磁盘的不同组织形式
4、聚簇索引和非聚簇索引
5、InnoDb普通索引的组织形式
回表、索引覆盖、最左匹配、索引下推的概念
1)回表、索引覆盖
根据上图可以得出索引覆盖的效率更高
2) 、最左匹配
3) 索引下推
小常识