MySQL索引
1、B+树索引
是InnoDB引擎默认的索引
- B+树结构
B+树是平衡树,即所有叶子节点都在同一层的多叉树
每个节点中key和指针交替排列,两个key之间的指针指向的是大于等于左边key且小于等于右边key的节点
叶子节点顺次连接,所以沿着B+树的叶子节点走能得到按key排序后的数据 - 操作
查找:先在根节点二分查找,找到key所在的指针,递归地去相应的节点继续查找
增删节点:为了维护树的平衡性,需要进行节点的分裂合并,旋转等操作 - 与B树的对比
1)B树中间节点也存数据,没有冗余的索引,而B+树只在叶子节点存数据,key值不止会出现在一个地方,因为节点不存数据,比较小,所以磁盘读写代价更低
2)B树搜索路径是根到中间节点,B+树是根到叶子节点,所以搜索过程比较稳定 - 与红黑树的对比
1)B+树的树高更矮,因为红黑树是二叉树
2)B+树更适合磁盘读取,因为树高低,磁盘寻道次数少
3)B+树叶子节点顺序存储,磁盘预读的特性更适合
2、哈希索引
InnoDB引擎的索引
有O(1)的查询速度,但是失去了有序性
- 不支持排序和分组
- 只支持精确查找,无法用于范围查找和部分查找
InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的一些优点,比如快速的哈希查找
3、全文索引
MyISAM引擎的索引,InnoDB也支持
- 用于查找关键词,使用倒排索引实现
4、空间数据索引
MyISAM 引擎支持空间数据索引(R-Tree)
- 用于地理数据存储,空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询
- 必须使用 GIS 相关的函数来维护数据
主索引和辅助索引
主索引:也叫聚簇索引,指的是叶子节点直接存数据本体的索引
辅助索引:叶子节点存的是主索引,先找主索引,找到主索引后再到主索引上找数据本体,这个过程叫回表