2022-04-18 14:55:57
MySQL聚簇索引和非聚簇索引
一、聚簇索引(Clustered Index)
定义:聚簇索引是指索引的存储顺序与数据的物理存储顺序一致的索引。在MySQL的InnoDB存储引擎中,聚簇索引就是主键索引,即找到了索引就找到了需要的数据。
特点:
示例:在创建的学生表中,如果以id作为主键,则id上的索引就是聚簇索引。执行select * from student where id = 1时,可以直接从聚簇索引中获取到id=1的整行数据。
二、非聚簇索引(Non-Clustered Index)
定义:非聚簇索引是指索引的存储顺序与数据的物理存储顺序不一致的索引。在MySQL的InnoDB存储引擎中,非聚簇索引也叫做皮族辅助索引,其叶子节点存储的是主键值,而不是整行的数据。
特点:
示例:在创建的学生表中,如果no是一个唯一索引,则no上的索引就是非聚簇索引。执行select no,name from student where no = 'test'时,需要先找型茄到no索引的叶子节点,然后根据叶子节点中的主键值回表查询no和name的值。但是,如果执行select no from student where no = 'test'时,由于查询的列就是索引本身,此时可以认为在该查询场景下,no索引也可以当做聚簇索引使用(尽管它本质上是非聚簇索引),因为不需要回表查询即可获取所需的数据。
总结: