聚簇索引的定义

定义

一直对聚簇索引的概念不是很清晰。之前的理解(包括网路上的解释),聚簇索引和非聚簇索引的区别是:
叶子节点是否存放一整行记录

以mysql为例:

  • innodb引擎,主键使用的是聚簇索引,非主键使用的是非聚簇索引。
  • myisam引擎,不管主键还是非主键,使用的都是非聚簇索引。
聚簇索引与非聚簇索引.png

并且还给了如上的示意图。

但是我一直对这个解释存疑,不能直观的把聚簇索引的定义和innodb的主键聚簇索引联系在一起。

直到我读到了[数据库系统内幕]这本书中对聚簇索引的\color{red}{定义}
\color{red}{如果数据记录的顺序遵循搜索键顺序,则这种索引称为聚簇索引(clustered/clustering index)。}

书中还详细讲解到:聚簇索引中的数据记录,通常与索引存储于同一个文件中,有时也存放在单独的聚簇文件中,而这些文件均保留了键的顺序。如果数据存储在单独的文件中,且其顺序不遵循键顺序,则索引为非聚簇索引。

参考

[数据库系统内幕] 2020-05第一版 p23