4

我开发了一个使用 OR 查询的系统:

SELECT * FROM tableA 
JOIN tableB ON (idA = idB)
WHERE idA = 1 OR 
      idA = 2 OR 
      idA = 3 OR 
      idA = 4 OR 
      idA = 5 ...... OR 
      idA=100

与查询 IN 比较:

SELECT * 
FROM tableA JOIN tableB ON (idA = idB)
WHERE idA IN (1,2,3,4,5,......,100)

MYSQL 数据库中最好的查询是什么?

4

4 回答 4

13

用于。

IN 将使用索引。

或将(afaik)不使用索引。

此外,这一点不容小觑,IN 版本:

  • 使用更少的代码
  • 更容易维护
  • 更容易理解

仅出于这些原因,我就会准备好遭受一点性能来获得代码质量,但实际上你也获得了性能。

于 2012-12-20T02:18:16.423 回答
4

在这种情况下,您应该通过 EXPLAIN 运行查询,以检查它如何针对您的数据工作。例如:

EXPLAIN SELECT * FROM tableA

JOIN tableB ON (idA = idB)

WHERE idA = 1 OR idA = 2 OR idA = 3 OR idA = 4 OR idA = 5 ...... OR idA=100

这将提供几个统计数据并显示它是否使用索引、顺序扫描等。从中您将能够确定最适合您的情况的方法。

但是,总的来说,我会选择IN。

以前的工作已经确定 IN 几乎总是会更快:MYSQL OR vs IN 性能

于 2012-12-20T02:20:10.307 回答
0
SELECT * FROM tableA

JOIN tableB ON (idA = idB)

WHERE idA <= 100
于 2012-12-20T02:20:30.177 回答
0

如果您有 In 作为替代品,切勿使用 Or。

它使您的查询超级慢

于 2012-12-20T02:47:17.503 回答