Skip to content
进阶

一句话答案

区分度高的列放前面,WHERE 常用列+ORDER BY 列+SELECT 覆盖列,范围查询列放最后。

核心要点

设计原则:

  1. 最左前缀:查询必须从最左列开始
  2. 区分度高的列在前(选择性高)
  3. 尽量覆盖索引(避免回表)
  4. 范围查询列放最后(>/<会中断后续列的索引使用)

经验公式: WHERE常用列 + ORDER BY列 + SELECT覆盖列

追问与易错

追问方向:

  • 等值和范围列怎么排序?
  • 怎么判断索引是否冗余?
  • 索引建多了有什么危害?

易错点:

  • ❌ 每个查询都建索引——合理设计联合索引一个顶多个
  • ❌ 忽略更新频率

💡 记忆锚点

联合索引设计像排兵布阵:区分度高的兵放前排(过滤效果好),等值查询列打头阵,范围查询列殿后(范围后面的列用不上),最后看能不能把 SELECT 的列也塞进去凑成覆盖索引(避免回表)。一个好的联合索引能一个顶三个单列索引。