MySQL索引是一种数据结构,而该数据结构为 B+树 和 Hash树,其中默认情况下是 B+树
(在MySQL中,只有 HEAP/MEMORY 引擎表才能显式支持 hash 索引)

那么现在说下这两种树的区别,以及为什么默认情况下使用的是 B+树
1.查询速度
B+树:与树的高度有关,所以是log(n)
Hash树:无论数据量的多少,都只有一层,所以是o(1)

2.结构区别
B+树:数据排序根据小的放左,大的放右的顺序进行排序,并且数据都在叶子节点,同时叶子节点之间还加了指针形成链表,只需要找到首尾,通过链表就能把所有数据取出来了

Hash树:Key-Value的形式进行存储,不具备排序性

3.适用场景
B+树:差异性相对较差的数据,并且以范围查找为主,B树是更好的选择
Hash树:不能用于复合索引,并且适合单条数据的查询/等值查询,及值的差异性大,并且以等值查找(=、 <、>、in)为主,不适合于范围查询,,Hash索引是更高效的选择

并且数据库中的索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+树的设计(多层)可以允许数据分批加载,同时树的高度较低,提高查找效率
这就是为何默认以 B+树 的数据结构进行存储索引了