按查询形状设计联合索引
按客户筛选、按日期读取订单,评估 customer_id 与 ordered_at 的联合索引。
常见做法给每个字段单独建索引,期望优化器总能组合出最佳访问路径。
最左前缀是理解索引的起点,优化器也可能选择其他策略。小数据集可能全表扫描;不要依据本例声称已提速。
CREATE INDEX idx_customer_date
ON orders(customer_id, ordered_at);
SELECT id, amount
FROM orders
WHERE customer_id = 1 AND ordered_at >= '2026-01-01'
ORDER BY ordered_at, id;示例结果
| id | amount |
|---|---|
| 1 | 120.00 |
| 2 | 80.00 |
动手练习
仅按 ordered_at 筛选时,这个索引一定有效吗?
查看参考答案 +
不一定。结合选择性与 EXPLAIN 评估;如果日期查询频繁,可测试日期开头的索引。