前言
当数据库中数据量较大时,使用索引可以很大程度上加快检索数据的速度,同时索引主要是在引擎层,不同引擎所支持的索引也各不相同。
一、索引结构
1.B+tree:最常见的索引,大部分引擎均支持(mysql默认)
2.hash索引:hash表实现,不支持范围查询,只支持精确比对
3.R-Tree空间索引:MyISAM的特殊索引,使用较少
4.full-text:匹配文档的方式,建立倒排索引
二、不同引擎对索引的支持
(默认为B+树索引)
三、B+树索引
B+树中所有元素均会出现在最底层,而在非叶结点不存储数据,这样加大了非叶结点存储关键字的数量,与b-Tree相比,减小了树的高度,从而加快检索速度。
B+树中一个节点占用一页(16k),因此同等大小下,中间节点不存储数据可增多关键字数量,形成双向列表,便于查找。
四、hash索引
计算出每一行的hash值,将建立索引的字段的hash所有值通过hash函数映射到hash表上,发生冲突时根据链表解决冲突。
hash(memory支持,innoDB可自动转换)索引的特点:
1.只支持精确的数值比较,不支持范围查询。
2.无法用索引完成排序
3.不发生冲突时只需要一次比较就可以,性能较优。
五、B+树较其他索引的优势
1.相对于二叉树
相对于二叉树,相同数据的情况下,二叉树较高,而树的查询跟树的高度相关,因此二叉树检索速度会相对较慢
2.相对于B-Tree
相对于b-tree(详见b+tree部分),b-tree中间节点出存放数据,导致树高会大于B+树
2.相对于hash
3.相对于hash存储,hash只支持等值匹配,不支持范围匹配。