《高性能Mysql》原文
聚簇索引如下图为聚簇所有的存储方式,聚簇实际不是一种索引,而是一种数据的存储方式,InnoDB的聚簇事假在同一个结构中保存了B-Tree索引和数据行。
当表有聚簇索引时,他的数据行实际存在放叶子页。InnoDb通过主键聚集数据,如果没有定义主键则InnoDB会选择一个唯一的非空索引代替。
1.聚簇索引的特性
1.1当表存在主键时,Innodb 使用 主键作为聚簇索引
1.2当表没有主键时,Innodb 使用第一个唯一约束索引(这个唯一索引必须是不包含null列的)作为聚簇索引
1.3当表没有主键,也没有合适的唯一索引时,Innodb隐含创建一个包含rowid 的聚簇索引
下面展示了聚族索引中的记录是如何存放的。注意到,叶子页包含了行的全部数据,但是节点页只包含了索引列。
2. 聚族索引的优点可以把相关数据保存在一起。例如实现电子邮件时,可以根据用户ID来聚集数据,这样只需要从磁盘读取少数的数据页就能获取某个用户的全部邮件。如果没有使用聚族索引,则每封邮件都可能导致一次磁盘I/O;
数据访问更快。聚族索引将索引和数据保存在同一个B-Tree中,因此从聚族索引中获取数据通常比在非聚族索引中查找更快。
使用覆盖索引扫描的查询可以直接使用节点中的主键值。
3 聚族索引的缺点聚簇数据最大限度的提高了I/O密集型应用的性能,但如果数据全部都放在内存