聚簇索引与非聚簇索引是MySQL数据库中的两种索引类型。
它们的主要区别如下:
聚簇索引
- 数据存储:在聚簇索引中,叶子节点直接存储了完整的行数据。
- 访问特性:由于数据行本身是按索引顺序存储的,所以对于范围查询和排序操作非常高效,因为这些操作可以直接遍历连续的物理页面。
- 数量限制:每个表只能有一个聚簇索引
- 适用场景:特别适合于那些经常进行范围查询(例如 BETWEEN、>、< 等操作)或者需要按特定列排序结果集的查询。
非聚簇索引
- 数据存储:非聚簇索引的叶子节点并不存储完整的行数据,而是存储索引列的值加上指向实际数据行的指针。
- 访问特性:当通过非聚簇索引查找数据时,首先会定位到索引的叶子节点,然后通过该节点中的指针再次访问实际的数据行,这个过程类似字典中查找对应的关键字。
- 数量限制:一个表可以拥有多个非聚簇索引,这允许根据不同的查询需求来创建不同的索引来优化性能。
- 适用场景:非常适合用于快速查找特定值的查询(例如 = 或 IN 操作),尤其是在那些不涉及大量范围(相对精确区间范围)扫描的查询场景中。