網上流傳「UNION ALL 優於 OR/IN」,真相如何?本文通過 1000 萬數據實測,對比索引列與非索引列三種寫法的耗時、執行計劃(type/ref/rows),得出四條場景化選擇策略,打破迷信。
-- UNION ALL EXPLAIN SELECT * FROM BT WHERE ID=98 UNION ALL SELECT * FROM BT WHERE ID=85220 UNION ALL SELECT * FROM BT WHERE ID=9888589; -- IN EXPLAIN SELECT * FROM BT WHERE ID IN (98,85220,9888589); -- OR EXPLAIN SELECT * FROM BT WHERE ID=98 OR ID=85220 OR ID=9888589;
結果:耗時均 ~0.00s(EMS 工具顯示 93/94/93 ms,差異可忽略)。執行計劃:UNION ALL 走 ref(非唯一索引掃描),OR/IN 走 range(索引範圍掃描),ref 理論優於 range 但實測無感知。掃描行數均為 3。

ref)。