查看网上各种博客对这些概念的解读,基本上都是千篇一律,但是在论述过程中都指向了一本书《高性能MySQL第三版》。
通过对《高性能MySQL第三版》中文版和英文版的查看,其中也没有说明白或者完全界定这些概念的区别。
聚簇索引(Clustered indexes)是指索引和数据是在同一个结构里,聚簇索引的顺序就是数据的物理存储顺序。
非聚簇索引(Non-clustered indexes)反之。
对于InnoDB和MyISAM引擎中的索引,都分为主键索引(primary key)和二级索引(secondary index);
在InnoDb中,强制使用主键作为聚簇索引,B+ Tree叶子节点存储就是主键数据,而二级索引的叶子节点存储的是主键的键值;
在MyISAM中,主键索引与二级索引没什么区别,都是存储的数据行对应的地址。
但是书中又把InnoDB作为聚簇索引的代表、MyISAM作为非聚簇索引的代表,两者进行比较,这就导致了矛盾点,如果将二级索引等价于非聚簇索引,那InnoDB就不能完全代表聚簇索引;但是单从二级索引的存储形式来看,又属于非聚簇索引。懵了...