深入浅出 MySQL 聚簇索引 vs 辅助索引:结构、原理与性能全解析
聚簇索引(Clustered Index)
存储结构
B+Tree 的叶子节点不仅包含主键索引值,还直接存储了完整的行记录数据
特点
- 数据行实际存储在索引结构的叶子节点中
- 一个表只能有一个聚簇索引
- 物理存储顺序与索引顺序一致
构建规则
- 主键优先原则
- 唯一索引候补
- 隐式row-id机制
优点
- 范围查询性能高
- 排序检索性能极佳
- 主键查找无需回表
缺点
- 插入性能影响
- 索引键较大影响存储空间
主键索引和辅助索引对比
主键索引
- 叶子节点存储完整行数据
- 必然是聚簇索引
- 查询只需一次索引查找
辅助索引
- 叶子节点存储索引字段值和主键值
- 需要两次查找:先辅助索引,再聚簇索引
- 可创建多个
回表查询
机制
- 通过辅助索引树找到符合条件的索引项
- 获取记录的主键值
- 用主键值到聚簇索引中查找完整记录
性能分析
- 需要两次索引查找
- 可能需要两次磁盘IO
优化策略
- 使用覆盖索引
- 减少查询列
- 使用主键查询
聚簇索引的选择建议
| 类型 | 评价 |
|---|---|
| 自增整数 | 高,插入顺序,减少页分裂 |
| UUID/随机数 | 低,插入随机,页分裂 |
| 字符串/长键值 | 低,空间占用大 |
区别对比
| 特性 | 聚簇索引 | 非聚簇索引 |
|---|---|---|
| 存储结构 | 索引与数据物理合一 | 索引独立 |
| 数量限制 | 每张表仅有一个 | 每张表可有多个 |
| 适合场景 | 范围查询、排序 | 精确条件查询 |