聚簇索引、非聚簇索引、二级索引的概念区别



查看网上各种博客对这些概念的解读,基本上都是千篇一律,但是在论述过程中都指向了一本书《高性能MySQL第三版》。



通过对《高性能MySQL第三版》中文版和英文版的查看,其中也没有说明白或者完全界定这些概念的区别。


聚簇索引(Clustered indexes)是指索引和数据是在同一个结构里,聚簇索引的顺序就是数据的物理存储顺序。

非聚簇索引(Non-clustered indexes)反之。


对于InnoDB和MyISAM引擎中的索引,都分为主键索引(primary key)和二级索引(secondary index);



在InnoDb中,强制使用主键作为聚簇索引,B+ Tree叶子节点存储就是主键数据,而二级索引的叶子节点存储的是主键的键值;



在MyISAM中,主键索引与二级索引没什么区别,都是存储的数据行对应的地址。



但是书中又把InnoDB作为聚簇索引的代表、MyISAM作为非聚簇索引的代表,两者进行比较,这就导致了矛盾点,如果将二级索引等价于非聚簇索引,那InnoDB就不能完全代表聚簇索引;但是单从二级索引的存储形式来看,又属于非聚簇索引。懵了...

图片说明

主要的问题是:
InnoDB的二级索引就是非聚簇索引吗?如果是的话,那InnoDB就应该定位为聚簇索引与非聚簇索引项结合,这个又与InnoDB定位聚簇索引相矛盾。

这个矛盾点我也有点懵,也查了很久资料。可能大多数是以主键索引为代表性的吧,而并不是二级索引。 你是怎么理解的呢?指教下

二级索引是非聚簇索引。。。。。。。。。。。。。。

https://blog.csdn.net/tfstone/article/details/81197921