索引数据结构
- 二叉树
- 红黑树
- hash表
- B-Tree
-
B+Tree
二叉树
如图,图一比较理想状态下的二叉查找树,数据插入顺序是4261357,图二插入顺序是1234567,假如这一列作为主键索引,id自增顺序插入,那么就会生成这种类似链表的树形结构,如果我们要查找6这个数,用了索引和不用索引全盘查找没有区别,单边增长的数据链如果用二叉树查找对效率没有什么帮助,所以MySQL不用二叉树作为索引结构。(画二叉树可以去这个网址,很方便)Binary Search Tree Visualization)https://www.cs.usfca.edu/~galles/visualization/BST.html
红黑树
对于单边增长的比较连续的数据,红黑树是可以挪动节点来均衡的,但是在数据量大的情况下高度不可控,io次数依然很多
hash
对索引的key进行一次hash运算就可以定位到数据位置,但是不支持范围查找
b-tree
b-tree相对红黑树树的高度减少,io次数减少
b+tree
不过MySQL没有选用b-tree做索引,而是选择b+tree,因为b-tree非叶子节点也有存储数据,而b+tree只在叶子节点存数据,非叶子节点存索引值和指针,这样在相同数据量情况下,选用b+tree的树高度会低于b-tree,可以减少io次数