前期数据结构准备:
重点:B+tree
B+tree是由二叉树----》二叉平衡树(AVL树)----》平衡多叉树(B Tree(N叉树))-----》B+ Tree
使用B+tree的本质是提升查找效率,那么怎么查找更快?二分查找和顺序查找
二叉查找树:左边小于右边,右边大于或等于根节点的值
缺点:有可能只有左边或者只有右边,查找效率相当于链表,这样的二叉查找树没有意义
进化---》二叉平衡查找树:
平衡二叉查找树(AVL树)
满足二叉查找树
任何根节点,左右两边的高度差(单个叶子节点不能>1)的绝对值不能超过1(通过旋转,使高度绝对值小于1--可以等于1)
缺点:当子节点越来越多,树的深度也越来越大,会影响查找效率
进化---》多叉平衡查找树(BTree和B+Tree)
B TREE和B+Tree都是多叉平衡查找树,树的高度一般2~3层
BTree在非叶子节点也存放数据,查询的话,返回的数据会更多,占用IO
B+Tree在非叶子节点不存放数据,只存储索引,只在最底层叶子节点存放数据,返回的数据相对少
B+Tree的叶子节点之间使用的指针进行链接,变成链表(双向链表)的结构,进行了排序,可以进行双向排序
B*树在非叶子节点之间也用指针进行链接,oracle使用的是B*树
B+Tree查出来的数据都是排好序的
B+tree生成网址:B-Tree Visualization
一、官方定义的索引:帮助mysql高效获取数据的数据结构,
本质上是一种数据结构;
作用是用来高效获取数据的;
二、索引的分类
(1)按数据结构分:
B+Tree:生成一颗N叉树,最下层的叶子节点使用双向链表的方式进行链接,最下层既存储了索引,也存储了对应的数据
Hash索引:根据索引字段生成hashCode进行存储;
影响B+Tree查询效率的,一般是取决于B+Tree的高度,一般情况下,mysql优化器会将B+Tree的高度设置为3~4层
对于精确查找(=、in)使用Hash索引,只需要精确匹配一次即可获取结果,效率比使用B+Tree索引高;
mysql5.7在InnoDB开启了自适应Hash索引,即根据热点数据分析后,会自动创建Hash索引,不需要程序员手动去创建;通过下面sql可以查到: