hash、平衡二叉树、BTree、B+tree的区别

索引文件存在磁盘中,查询数据库数据是通过扫描索引文件查找数据对应索引,在
通过索引获取表的数据。

hash

hash、平衡二叉树、BTree、B+tree的区别_第1张图片

avl Tree平衡二叉树

hash、平衡二叉树、BTree、B+tree的区别_第2张图片

假设查询10,四步磁盘IO 操作
判断10>4,进行磁盘IO 第1次
判断10>8,进行磁盘IO 第2次
判断10>9,进行磁盘IO 第3次
判断10=10,进行磁盘IO 第4次

BTree
hash、平衡二叉树、BTree、B+tree的区别_第3张图片
假设查询10,三步磁盘操作
判断10>4,进行磁盘IO 第1次
判断10>8,进行磁盘IO 第2次
判断10=9 or 10=10,进行磁盘IO 第3次
B+tree

hash、平衡二叉树、BTree、B+tree的区别_第4张图片
最下面一行的是非叶子节点,除下面一行和根节点的是叶子节点
假设查询10,三步磁盘操作
判断10>5,进行磁盘IO 第1次
判断10>7,进行磁盘IO 第2次
判断10=11 or 10=10,进行磁盘IO 第3次

总结

由上图可知
hash不能解决范围查询
avl Tree、BTree、B+tree可以解决范围查询
如果查询的数据为10
avl Tree的深度为4,而BTree、B+tree的深度为3,所以BTree、B+tree 磁盘IO操作次数少
avl Tree、BTree范围查询效率低,索引文件占内存少
B+tree范围查询效率高,索引文件占内存多(内存问题不是很大对于大数据效率才是王道)
因一般查询都有范围查询,所以B+Tree的优点大于其他索引

小知识

mysql引擎类型包含myisam和innoDB(底层为B+tree)一般使用innoDB多
因为innoDB的非叶子节点包含key和数据,数据可以直接获得而myisam
非叶子节点只包含key

你可能感兴趣的:(数据结构系列)