最左前缀原则要点
- 组合索引 (a, b, c) 能加速 a、a+b、a+b+c 三种查询
- 跳过最左列直接查 b 或 c,索引基本用不上
- 范围查询(如 a 在某区间)之后的列会失效
- 把区分度高的列放前面,过滤性更强
- ORDER BY 也能借组合索引免去额外排序
- 设计索引前先列清楚高频 WHERE 条件组合
最左前缀原则示例
-- 组合索引
CREATE INDEX idx_city_age ON user (city, age);
-- 走索引:命中最左列 city
SELECT * FROM user WHERE city = '北京';
-- 走索引:city + age 连续命中
SELECT * FROM user WHERE city = '北京' AND age = 30;
-- 不走索引:缺最左列 city,直接查 age
SELECT * FROM user WHERE age = 30;
避坑提醒:把组合索引想成「电话区号 + 号码」:不先拨区号直接拨号码,交换机无从查起,索引同理。