2026-10-23 11:35:28
一、聚簇索引
聚簇索引(Clustered Index)实际上并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引的叶子节点保存了一行记录的所有列信息,也就是说,聚簇索引的叶子节点中,包含了一个完整的记录行。在InnoDB存储引擎中,每个表必须有一个聚簇索引,默认是根据主键建立的。如果表中没有主键,InnoDB会选择一个合适的列作为聚簇索引,如果找不到合适的列,会使用一列隐藏的列DB_ROW_ID作为聚簇索引。
二、非聚簇索引
非聚簇索引(Non-Clustered Index)也叫辅助索引、普通索引,它的叶子节点只包含一个主键值。通过非聚簇索引查找记录要先找到主键,然后通过主键再到聚簇索引中找到对应的记录行,这个过程被称为“回表”。非聚簇索引的叶子节点中不包含整个记录的完整信息,除了索引字段本身以外,只包含当前记录的主键id。因此,如果想要获取整行记录数据,还需要再通过主键号到聚簇索引中回表查询。
三、联合索引
联合索引指的是同时对多列创建的索引。创建联合索引后,叶子节点会同时包含每个索引列的值,并且同时根据多列排序,这个排序和字典序类似。联合索引的使用要遵循最左前缀匹配原则,即只有按照索引列的顺序进行查询,才能使用到索引。例如,对列(A, B, C)创建索引,那么只有对列(A, B, C)、(A, B)或(A)进行查询时,才能匹配到索引。
联合索引中还有一些重要的概念:
四、唯一索引
唯一索引是一种不允许具有相同索引值的索引。系统在创建该索引时检查是否有重复的键值,每次对更新或增加记录时都会检查这一点。主键索引就是唯一索引的一种特殊形式。唯一索引保证了索引列中的值是唯一的,从而保证了数据的唯一性。
示例图片展示
以下是聚簇索引和非聚簇索引的结构示意图:

(聚簇索引的叶子节点中包含了完整的记录行)

(非聚簇索引的叶子节点中只包含了主键值和索引字段)
以下是联合索引的结构示意图:

(联合索引的叶子节点同时包含了多个索引列的值和主键值)
总结