Fork me on GitHub

创建高性能的索引

索引由存储引擎层实现。

B-Tree索引

查询类型

  1. 全值匹配:索引中所有列进行匹配;
  2. 匹配最左前缀:只是用索引的第一列;
  3. 匹配列前缀:匹配索引第一列的值的开头部分;
  4. 匹配范围值:索引第一列某个范围的所有;如果范围匹配的不是索引第一列,需要补全需要范围索引列的前面全部索引列

限制

限制与索引列的顺序息息相关

  1. 如果不是从索引的最左列开始查找,则无法使用索引;
  2. 不能跳过跳过索引中的列;
  3. 如果查询中有某个列的范围查找,其右边所有列都无法使用索引优化查找。

哈希索引

限制

  1. 哈希索引只保存哈希值和行指针,不存储字段值;需要通过行指针获取行数据;
  2. 哈希索引不支持部分索引列匹配,因为哈希值是全部索引列的值哈希得到的;
  3. 哈希索引只支持等值查询;
  4. 哈希索引无法用于排序,因为数据不是按索引的值顺序存储的。

自适应哈希索引

当InnoDB注意到某些索引值被使用非常频繁时,会在B-Tree索引的基础上建立哈希索引,这样就有了哈希索引的一些特点,比如快速哈希查找;这是一个完全自动、内部的行为,无法人为配置控制,只能选择开启或关闭该功能。

空间数据索引(R-Tree)

MyISAM表支持空间索引,可以用作地理数据存储;和B-Tree索引不同,它无需前缀索引,而是可以使用所有维度来索引数据,可以使用任意维度来组合查询。

全文索引

全文索引是一种特殊的索引类型,用于查找文本中的关键词,而不是索引的值。

-------------本文结束感谢您的阅读-------------