使用OR子句的MySql JOIN查询速度非常慢

使用OR子句的MySql JOIN查询速度非常慢,mysql,Mysql,我有以下疑问: SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id = b.from OR a.id = b.to; 这是非常缓慢的 如果我删除OR子句并分别运行每个查询,那么这两个查询将在1秒内执行 SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id = b.from; SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id =

我有以下疑问:

SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id = b.from OR a.id = b.to;
这是非常缓慢的

如果我删除OR子句并分别运行每个查询,那么这两个查询将在1秒内执行

SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id = b.from;
SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id = b.to; 

如何加快原始查询的速度(设置索引)或重新设计查询本身?

以下内容如何。只需加入
b
两次:

SELECT a.id, b.from, b2.to 
FROM a 
INNER JOIN b ON a.id = b.from
INNER JOIN b b2 ON a.id = b2.to;

如果两种情况下都没有记录,则可能必须使用左联接。

使用union如何

SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id=b.from
UNION
SELECT a.id, b.from, b.to FROM a INNER JOIN b ON a.id=b.to

您能提供表的详细信息吗?有关性能的问题通常需要适当的DDL和解释—不完全是解决方案,但足以修复我的查询。我使用union来减少外部select上发生的连接的行数,例如:select*FROM(select…union select)内部连接。