Mysql 使用带有“IN子句”vs“=”的查询

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

由于性能提高,我需要将所有循环查询转换为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=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;