聚集索引和非聚集索引

什么是聚集索引

聚集索引是将索引列字段行记录数据维护在了一起,它的叶子节点存储的是 索引列字段 + 完整的行记录数据,通过聚集索引能直接获取到整行数据

Innodb 的主键索引就是基于聚集索引实现的

通俗点讲:利用聚集索引可以直接获取对应的元素数据

img

什么是非聚集索引

非聚集索引是相比较于聚集索引来说,它是把索引和行数据分开维护,叶子节点并没有包含完整的数据记录(叶子节点的数据区存储的是聚集索引的 id 或 数据的磁盘地址)Mysql 非聚集索引底层的数据结构也是 b+ 树,例如 Myisam 的索引、Innodb 的辅助索引

img

比如在搜索年龄为41的数据时,会找到13,然后再去找利用聚集索引找主键为13的数据

回表(尽量去减少回表的产生)

当通过非聚集索引来查询数据时,存储引擎会根据索引字段定位到最底层的叶子节点,并通过叶子节点获得指向主键索引的主键 id,然后通过主键 id 去主键索引(聚集索引)上找到一个完整的行记录.这个过程被称为 回表