MYSQL查询在vs或
我使用OR查询开发了一个系统: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
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