聚簇索引(MySQL)

63 阅读2分钟

名词解释

聚簇:数据全表和索引表存储在一起 回表:数据全表和索引表是分开的,数据表中只有主键字段数据和索引字段数据,使用索引字段查询其他非主键索引数据需要通过索引表,找到数据表上对应字段数据和主键字段主键,然后使用主键字段数据回到聚簇索引表上,才能查询到对应条件下的其他字段数据

聚簇索引

概念

又叫主键索引,并不是一种索引类型,而是一种数据存储方式,数据就存储在索引表的叶子节点上。索引表使用双向链表存储,数据全表使用单向链表存储。

image.png

特点

  • 叶子节点中的数据表中有着全部字段的数据(为了方便描述,本文使用数据全部代指聚簇索引下的数据表)
  • 相对于非聚簇索引在查询大部分字段时需要回表,聚簇索引数据访问更快
  • 排序查找和范围查找快
  • 插入速度依赖插入顺序,在末端插入时不需要重排数据全表的数据会比较快,一般用于自增ID,且不更新
  • 二级索引访问需要两次索引访问
  • MySQL只有InnoDB支持(即使不定义主键也会默认隐式创建),MyISAM不支持
  • 因为是数据全表只能按其中一个字段进行排序存储,所以只能有一个

非聚簇索引

概念

又叫二级索引、辅助索引。在已经有一个主键字段存在的时候,数据已经按照主键字段排序存储了,在这种情况下需要为别的字段创建索引,只能使用非聚簇索引,因为非聚簇可以实现数据表和索引表分开存储。

image.png

特点

  • 叶子节点中的数据表只有该索引字段数据和主键数据
  • 相对于聚簇索引,非聚簇索引更新效率会更高,因为需要改动的数据较少
  • 可以创建多个

联合索引

多个字段组成的非聚簇索引