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

时间:2014-07-28 14:38:03

标签: 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 = b.to; 

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

2 个答案:

答案 0 :(得分:3)

使用联盟怎么样?

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

答案 1 :(得分:1)

相反如下。只需加入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;

如果您不总是有两种情况的记录,则可能必须使用LEFT JOIN。