WHCSRL 技术网

聚集索引和非聚集索引

聚集索引和非聚集索引

一言以蔽之,聚集索引就是索引顺序和物理顺序一致的索引结构,非聚集索引是索引顺序与物理顺序不一致的索引结构。

他们之间的关系有点像数组和哈希表,数组的下标就是聚集索引,哈希表的键就是非聚集索引。

Mysql中,聚集索引和非聚集索引的底层结构都是B+树

聚集索引

mysql中,主键就是加了唯一性约束的聚集索引,如果我们在创建表的时候不显式指定主键,mysql会自动为我们选择一列作为主键。

聚集索引一张表只能有一个,这是因为聚集索引的索引顺序与物理排列顺序一致,而物理排列顺序只能有一个。当然我们可以删除现有的聚集索引而重新设置一个,但这样会造成数据的物理重排。

在聚集索引的底层B+树中,叶子节点存储的就是每一个记录的全部数据。

非聚集索引

非聚集索引的底层B+树中,叶子节点存储的是非聚集索引的索引列和聚集索引的索引列,然后会有一个字段指向实际的物理数据存储地址。

这就涉及到一个二次查询问题,当我们检索数据带上了非索引字段时,就不得不再去实际数据的物理存储地址取一次数据。

解决二次查询问题的方法就是为常需要同时检索的数据建立多重索引,且符合最左前缀匹配法则。

ps

具体的说明可参照下面的链接,已经非常细致了,上述只是自己简化的记忆。

参考资料:

[1] 聚集索引与非聚集索引的总结

推荐阅读