三种查询对照
三种查询对照
-- 索引 idx(user_id, status, created_at)
SELECT * FROM orders WHERE user_id=1 AND status=2; -- 用 user_id+status
SELECT * FROM orders WHERE user_id=1 AND created_at>'2026-01-01'; -- user_id + created_at 范围(跳过 status 但 created_at 仍可定位)
SELECT * FROM orders WHERE status=2; -- 用不上(无最左列)| 最左前缀 | 从索引第一列开始连续匹配才有效 |
|---|---|
| 范围截断 | 范围列之后的列只能过滤不能定位 |
| 排序顺延 | WHERE 等值 + ORDER BY 后续列 = 免排序 |
「跳过中间列」后能否用后续列,取决于跳过的列是等值还是范围:等值可跳(8.0 索引跳跃扫描有限支持),范围不行。