Mysql 使用带有“IN子句”vs“=”的查询
由于性能提高,我需要将所有循环查询转换为IN子句。 我有以下条件,这些条件可能随迭代而变化Mysql 使用带有“IN子句”vs“=”的查询,mysql,sql,select,in-clause,Mysql,Sql,Select,In Clause,由于性能提高,我需要将所有循环查询转换为IN子句。 我有以下条件,这些条件可能随迭代而变化 Where recordID=2323 and (origin=626 or destination=319); Where recordID=2323 and (origin=319 or destination=789); Where recordID=2323 and (origin=567 or destination=989); Where recordID=2323 and (origin=7
Where recordID=2323 and (origin=626 or destination=319);
Where recordID=2323 and (origin=319 or destination=789);
Where recordID=2323 and (origin=567 or destination=989);
Where recordID=2323 and (origin=767 or destination=626);
为了提高性能,我想将这些查询转换成如下的IN子句
Where recordID=2323 and (origin IN(626,319,567,767) or destination IN (319, 789, 989, 626));
我的问题是,两种方法的计算结果是否相同?
是否有其他方法或任何其他方式来做到这一点
问题是,与每种方法相比,我的最终计数并不相同。不幸的是,没有很好的方法来优化不同列上的查询或条件。如果查询很简单,则可以使用union all: 然后,此版本的查询可以使用两个索引: 记录ID,来源 记录ID、目的地、来源 编辑:
如果您不关心性能,那么您使用in的方法很好,并且与原始逻辑相同。感谢Gordon的快速响应,Union都可以解决问题,但我的java程序迭代每次都会更改起点/终点,最终会执行多次。就像上一次迭代是1000。
select t.*
from t
where recordID = 2323 and origin = 626
union all
select t.*
from t
where recordID = 2323 and destination = 319 and origin <> 626;