Java开发

数据库性能调优:组合索引与原理

2025-08-30  本文已影响0人  _浅墨_

1) 索引的核心原理(快速回顾)

2) 组合/复合索引(what & how it works)

组合索引 = 在一个索引结构里包含多个列(例如 (a,b,c))。

关键规则:Left-most prefix(最左前缀规则)

等值与范围的顺序影响后续列使用

覆盖索引(covering index)

3) 设计原则(实务要点)

  1. 以查询为中心:先找最常见的慢查询,再为这些查询建索引。
  2. 把选择性高且常做等值的列放左边
  3. 相同索引不要重复
  4. 避免为低基数列单独建索引
  5. 覆盖索引优先
  6. 注意写成本
  7. 注意范围查询顺序

4) 常见使用场景与实例

场景 A:用户的最新订单分页
CREATE INDEX idx_orders_user_status_created ON orders (user_id, status, created_at);

解释:等值列放左边,排序列放右边,避免 filesort;如果 SELECT 列都在索引里则为覆盖索引。

场景 B:JOIN 场景 - 优化 JOIN 列
CREATE INDEX idx_orders_user_created ON orders (user_id, created_at);
场景 C:范围导致后续列失效

索引 (a, b, c) 查询 WHERE a = ? AND b > ? AND c = ? 时,c 无法用到索引。

场景 D:多个单列索引 vs 一个组合索引

推荐建 (a,b) 而不是单列索引。

5) 诊断工具与命令

6) Java 层面的实践建议

7) 索引维护与变更

8) 常见误区

9) 快速诊断清单

  1. EXPLAIN 分析。
  2. SHOW INDEX 查看选择性。
  3. 检查覆盖索引。
  4. 关注 filesort/temporary。

10) 结论

以慢查询为导向,合理设计组合索引,等值列放左、范围列放右,尽量覆盖索引,平衡读写。

上一篇 下一篇

猜你喜欢

热点阅读