mysql索引分类

70 阅读2分钟

按照物理实现方式分:

  • 聚簇索引

    • 聚簇索引不只是一种单独的索引类型,还是一种数据存储方式(数据记录在叶子节点上)

    • 聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚簇索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引(一般情况下就是该表的主键)。

    • 聚簇索引并不需要我们在MySQL中显式的使用INDEX 创建,InnoDB存储引擎会自动帮我们创建聚簇索引(MyISAM不支持聚簇索引)。

    • 聚簇索引对于主键的排序查找和范围查找速度非常快

  • 非聚簇索引(辅助索引、二级索引)

    • 在聚簇索引之上创建的索引称之为非聚簇索引,非聚簇索引访问数据总是需要二次查找。非聚簇索引叶子节点存储的不再是行的物理位置,而是主键值。通过非聚簇索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。

按照作用字段个数分:

  • 单列索引
    • 在表中的单个字段上创建索引。单列索引只根据该字段进行索引。单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。一个表可以有多个单列索引。
  • 组合索引
    • 多列索引是在表的多个字段组合上创建一个索引。使用组合索引遵循==最佳左前缀原则==