MYSQL查询在vs或

MYSQL查询在vs或,mysql,sql,where-in,Mysql,Sql,Where In,我使用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 与中的查询进行比较: SELECT * FROM tableA JOIN tableB ON (idA = idB) WHERE idA IN

我使用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
与中的查询进行比较:

SELECT * 
FROM tableA JOIN tableB ON (idA = idB)
WHERE idA IN (1,2,3,4,5,......,100)
MYSQL数据库中最好的查询是什么

在中,将使用索引

或者将(afaik)不使用索引

此外,这一点不容忽视,在版本中:

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

仅出于这些原因,我就准备牺牲一点性能来提高代码质量,但实际上您也获得了性能。

在这种情况下,您应该通过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几乎总是更快的:

SELECT*FROM tableA
连接上的表B(idA=idB)

其中idA永远不要使用或如果您有其他选择


它使您的查询速度非常慢

可能与@StanleyW重复。谢谢你的。。。我没有使用搜索功能来处理类似的事情,除非您知道此查询是应用程序中的瓶颈,否则它不值得使用多个
子句的混乱逻辑。(即使它稍微快一点。)IN()是一种语法快捷方式,它(在语法方面)与一系列OR完全相同,即(1,2)
中的id等于
(id=1或id=2)
。在小范围内,您将很难找到两者之间的任何差异。在非常大的范围内,一组长的ORs的解释时间将处于不利地位。我使用EXPLAIN获得相同的输出,我使用DESC并获得显示查询时间的差值,对于OR(查询耗时0.0082秒)和IN(查询耗时0.0074秒)嗯,我想我的查询不是idA的序列,但idA是随机值,,我只是创建了一个简单的示例问题:)我知道这是几年后的事了,但ORs和IN()的使用都可以(而且确实)使用索引。正如许多事情一样,一概而论是危险的。在语法方面,In()只是一组OR的快捷方式。请参阅(查询中的3个,或查询中的3个,所有6个都使用索引;varchar、date和integer测试)MySQL 5.6
SELECT * FROM tableA

JOIN tableB ON (idA = idB)

WHERE idA <= 100