正反例
正反例
-- 索引 (user_id, created_at)
-- 用上排序:WHERE user_id=1 ORDER BY created_at DESC(8.0 可反向扫)
EXPLAIN SELECT * FROM appdb.orders WHERE user_id=1 ORDER BY created_at DESC LIMIT 20;
-- 用不上:WHERE status=1 ORDER BY created_at(status 不在索引前导)
EXPLAIN SELECT * FROM appdb.orders WHERE status=1 ORDER BY created_at LIMIT 20;| 规则 | WHERE 等值列在前 + ORDER BY 列顺延 |
|---|---|
| LIMIT | 小 LIMIT 可让优化器偏好有序索引 |
| 混排 | ORDER BY a ASC, b DESC 需降序索引(8.0) |
排序消除成败看 Extra 是否仍有 Using filesort;LIMIT 小的语句有时 filesort 反而更快,勿一刀切。