作者:mobiledu2502891853 | 来源:互联网 | 2023-10-11 02:15
我假设您想知道以下之间的性能差异:
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% 左右。添加更多术语会使差异更大。结果可能因其他数据库和其他数据而异。