文章目录
一、索引是什么?
索引(index)是帮助MySQL高效获取数据
的数据结构
(有序)。在数据之外,数据库还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这样可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
二、索引的数据结构
1.Btree(多路平衡查找树)
以一颗最大度数(一个节点的子节点个数)为5的b-tree为例(每个节点最多存储4个key,5个指针);
Btree的创建过程
2.B+tree
以一颗最大度数为4的b+tree为例
相对于B-Tree区别:
①.所有的数据都会出现在叶子节点
②.叶子节点形成一个单向链表
MySQL中的B+Tree
在原B+Tree的基础上增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。
3.Hash
采用hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。
hash的特点
- 快速的查询速度:由于Hash索引通过哈希函数直接定位数据的位置,因此在大多数情况下可以实现O(1)的时间复杂度,比b+tree快。
- 适合精确匹配查询:Hash索引适用于精确匹配查询,如=、IN和<=>等操作符,因为这些查询可以直接通过索引定位到数据。
- 不支持排序和范围查询:Hash索引不支持排序和范围查询(如>、<、BETWEEN等),因为数据在索引中不是按照排序顺序存储的。
- 空间消耗:相对于其他类型的索引,Hash索引通常需要更多的空间,因为它需要存储更多的哈希表信息。
- 不适合频繁更新的场景:由于Hash索引需要维护哈希表,当数据表中的数据经常变更时,Hash索引需要更新,这可能会导致性能下降。
存储引擎支持
在MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引时存储引擎根据B+Tree索引在指定条件下自动构建的。