我有以下查询:
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;
如何加快原始查询(设置索引)或重新设计查询本身?
答案 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。