深入浅出 MySQL 聚簇索引 vs 辅助索引:结构、原理与性能全解析

聚簇索引(Clustered Index)

存储结构

B+Tree 的叶子节点不仅包含主键索引值,还直接存储了完整的行记录数据

特点

  • 数据行实际存储在索引结构的叶子节点中
  • 一个表只能有一个聚簇索引
  • 物理存储顺序与索引顺序一致

构建规则

  1. 主键优先原则
  2. 唯一索引候补
  3. 隐式row-id机制

优点

  • 范围查询性能高
  • 排序检索性能极佳
  • 主键查找无需回表

缺点

  • 插入性能影响
  • 索引键较大影响存储空间

主键索引和辅助索引对比

主键索引

  • 叶子节点存储完整行数据
  • 必然是聚簇索引
  • 查询只需一次索引查找

辅助索引

  • 叶子节点存储索引字段值和主键值
  • 需要两次查找:先辅助索引,再聚簇索引
  • 可创建多个

回表查询

机制

  1. 通过辅助索引树找到符合条件的索引项
  2. 获取记录的主键值
  3. 用主键值到聚簇索引中查找完整记录

性能分析

  • 需要两次索引查找
  • 可能需要两次磁盘IO

优化策略

  • 使用覆盖索引
  • 减少查询列
  • 使用主键查询

聚簇索引的选择建议

类型评价
自增整数高,插入顺序,减少页分裂
UUID/随机数低,插入随机,页分裂
字符串/长键值低,空间占用大

区别对比

特性聚簇索引非聚簇索引
存储结构索引与数据物理合一索引独立
数量限制每张表仅有一个每张表可有多个
适合场景范围查询、排序精确条件查询