小编典典

SQL WHERE子句中的IN vs OR

sql

在处理大型数据库时,哪个性能更好,IN还是OR在SQLWhere子句中?

它们的执行方式有什么不同吗?


阅读 203

收藏
2021-05-05

共1个答案

小编典典

我假设您想知道以下两者之间的性能差异:

WHERE foo IN ('a', 'b', 'c')
WHERE foo = 'a' OR foo = 'b' OR foo = 'c'

根据MySQL手册,如果值是常数IN,则对列表进行排序,然后使用二进制搜索。我可以想象一下,OR它们以不特定的顺序进行逐一评估。因此IN在某些情况下速度更快。

最好的了解方法是使用特定数据在数据库中同时对它们进行概要分析,以查看哪种方法更快。

我在具有1000000行的MySQL上都尝试过。对列进行索引后,性能没有明显的区别-两者几乎都是即时的。当该列未建立索引时,我得到了以下结果:

SELECT COUNT(*) FROM t_inner WHERE val IN (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000);
1 row fetched in 0.0032 (1.2679 seconds)

SELECT COUNT(*) FROM t_inner WHERE val = 1000 OR val = 2000 OR val = 3000 OR val = 4000 OR val = 5000 OR val = 6000 OR val = 7000 OR val = 8000 OR val = 9000;
1 row fetched in 0.0026 (1.7385 seconds)

因此,在这种情况下,使用OR的方法要慢30%左右。添加更多术语会使差异更大。结果可能在其他数据库和其他数据上有所不同。

2021-05-05