索引由存储引擎层实现。
B-Tree索引
查询类型
全值匹配
:索引中所有列进行匹配;匹配最左前缀
:只是用索引的第一列;匹配列前缀
:匹配索引第一列的值的开头部分;匹配范围值
:索引第一列某个范围的所有;如果范围匹配的不是索引第一列,需要补全需要范围索引列的前面全部索引列
限制
限制与索引列的顺序息息相关
- 如果不是从索引的最左列开始查找,则无法使用索引;
- 不能跳过跳过索引中的列;
- 如果查询中有某个列的范围查找,其右边所有列都无法使用索引优化查找。
哈希索引
限制
- 哈希索引只保存哈希值和行指针,不存储字段值;需要通过行指针获取行数据;
- 哈希索引不支持部分索引列匹配,因为哈希值是全部索引列的值哈希得到的;
- 哈希索引只支持等值查询;
- 哈希索引无法用于排序,因为数据不是按索引的值顺序存储的。
自适应哈希索引
当InnoDB注意到某些索引值被使用非常频繁时,会在B-Tree索引的基础上建立哈希索引,这样就有了哈希索引的一些特点,比如快速哈希查找;这是一个完全自动、内部的行为,无法人为配置控制,只能选择开启或关闭该功能。
空间数据索引(R-Tree)
MyISAM表支持空间索引,可以用作地理数据存储;和B-Tree索引不同,它无需前缀索引,而是可以使用所有维度来索引数据,可以使用任意维度来组合查询。
全文索引
全文索引是一种特殊的索引类型,用于查找文本中的关键词,而不是索引的值。