定义
A clustered index is a special type of index that reorders the way records in the table are physically stored. Therefore table can have only one clustered index. The leaf nodes of a clustered index contain the data pages.
聚簇索引就是索引列的顺序与数据的物理存储地址顺序一致,因此一张表只能有一个聚簇索引,因为物理存储顺序是唯一的。聚簇索引的叶子节点包含了数据页。(PS:应该是聚簇索引一般为InnoDB中的主键列,主键上的索引会包含Row的所有值以及事务信息)
不同引擎的数据存储
MyISAM引擎的主键索引和二级索引几乎是一致的,可以理解为他们都带有指向硬盘上数据的指针,只是主键必须是唯一的,因此,MyISAM查询的时候会像下图一样,找到物理地址,获取数据。
InnoDB引擎的主键索引会存储行值,以及包括一些事务相关的值,图中只画出了主键(id)和行值(Name、Company);而InnoDB的二级索引则会存储索引值以及对应的主键值,如图中按照二级索引列Name进行查询,二级索引会先获取到Name为Ellison对应的主键值14,再去以主键14为条件查询对应的整行的值。如下图所示。
以上图为例分析,InnoDB的主键是按顺序存储的,对应磁盘上的物理地址顺序,InnoDB主键列上的索引是聚簇索引。MyISAM则没有这一特性。
假设查询条件为30< id <100这一范围,在聚簇索引上只需要进行1次磁盘IO,因为数据都是连续的,而在非聚簇索引上则要进行多次的IO,因为数据和索引的顺序没有关系。
性能测试
待补充 今天吃鸡
延伸阅读:
(mysql索引原理之聚簇索引)
(Mysql聚簇索引和非聚簇索引原理(数据库))
(剖析Mysql的InnoDB索引)