示例
示例
-- 同列:IN 等价于多个 OR,可走 range
SELECT * FROM orders WHERE user_id IN (100, 101, 102);
-- 跨列 OR:依赖 index_merge,开销不稳定
SELECT * FROM orders WHERE user_id = 100 OR status = 'paid';
-- 改写为 UNION(两分支各自选择合适的索引)
SELECT * FROM orders WHERE user_id = 100
UNION
SELECT * FROM orders WHERE status = 'paid';| 同列 OR | 优化器常合并为 IN/range,可用索引 |
|---|---|
| 跨列 OR | 可能走索引合并或全扫描;改写 UNION 后两分支各自选索引 |
| 注意 | UNION 去重有成本;确认语义后再决定用 UNION 还是 UNION ALL |