概述:聚簇索引并不是一种单纯的索引类型,而是一种数据存储方式。因为是存储引擎负责实现索引,因此不是所有的存储引擎都支持聚簇索引(如MyISAM)。如:InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。
术语:“聚簇”表示数据行和相邻的键值紧凑的存储在一起。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引(不过,覆盖索引可以模拟多个聚簇索引的情况)。
当表有聚簇索引时,它的数据行实际上存放在索引的叶子页(leaf page)中。
下图为聚簇索引存放展示:叶子页包含了行的全部数据,但是节点页只包含了索引列(图示中索引列包含的是整数值/主键)
MyISAM为非聚簇索引,需要独立的行存储(一张表存储到磁盘时三个文件:.frm\.MYD\.MYI),每一个叶子页节点存储的是已经排序的列值(索引列),以及列值对应的行号。
如下图。注意:MyISAM是按照数据插入的书记徐存储数据,大部分情况如行是定长的,行号按插入顺序排列(从0开始)