MySQL索引有哪些类型
数据结构维度
- B+树索引:所有数据存储在叶子节点,复杂度为
O(logn),适合范围查询,io次数少。 - 哈希索引: 适合等值查询,不能范围/排序等查询,不发生hash冲突的情况下,检索效率比较高,一次到位。
- 全文索引:
MyISAM和InnoDB中都支持使用全文索引,一般在文本类型char,text,varchar类型上创建,但使用很少。
物理存储维度
- 聚集索引:聚集索引就是以主键创建的索引,在叶子节点存储的是表中的数据,查询为覆盖查询,不需要回表。
- 二级索引:二级索引就是以非主键创建的索引,在叶子节点存储的是主键和索引列,可能需要回表。
逻辑维度
- 主键索引:一种特殊的唯一索引,不允许有空值,主键就是聚集索引。
- 普通索引:
MySQL中基本索引类型,允许空值和重复值。 - 联合索引:多个字段创建的索引,使用时遵循最左前缀原则。通常来说资源需求大于普通索引,但更多的资源可能带来更多的收益。
- 前缀索引:使用字段前一部分创建,可以占用更少的资源。适用于大文本,但无法完成某些动作。
- 唯一索引:索引列中的值必须是唯一的,但是允许为空值。不能使用
change Buffer Pool优化修改。 - 空间索引:
MySQL5.7之后支持空间索引,在空间索引这方面遵循OpenGIS几何数据模型规则。
myisam不支持聚集索引