MySQL 索引

MySQL 索引

全文索引

  • MySQL5.6 以后的版本中 MYISAM 和 InnoDB 引擎支持,仅可以在 char、varchar、text 列上创建全文索引。全文索引的出现主要是针对模糊查询,
  • 全文索引是按照分词原理建立索引,MySQL的全文索引对中文不支持,需要安装插件提供对中文的支持

HASH 索引

  • MySQL 中只有 MEMORY 引擎显式支持 HASH 索引
  • hash 索引可以一次定位,不需要像树形索引进行逐层搜索
  • hash 索引仅能满足 “=”, “IN”, “!=” 查询,不能进行范围查询。主要是因为数据经过hash运算后存储位置不同,相邻的数据存储位置可能相差甚远
  • hash 索引无法避免排序运算
  • hash 索引不能利用部分索引建查询。使用多键建立 hash 索引,查询时无法利用其中部分键进行 hash 索引查询
  • hash 索引不能避免表扫描。当数据量大时,出现冲突,对于不同的 hash 冲突解决方法,需要进行表扫描来查找确切的数据
  • hash 索引当出现大量 hash 值相同时,索引速度不比树形索引高

BTREE 索引

  • MySQL 中默认的索引类型
  • 主键索引:仅能在主键上建立的索引,一般是聚簇索引,数据的物理存储位置和聚簇索引的序号有关
  • 唯一索引:必须唯一,但可以有空值
  • 普遍索引:没有限制要求