使用或条件缓慢执行左连接

时间:2014-12-18 11:09:49

标签: mysql sql performance left-join

我有一个SQL查询,它连接or-condition上的另一个表,如下所示:

select a.id,b.id from a left join b on (b.prop1=a.id or b.prop2=a.id)

1026 rows in set (12.77 sec)

如果我将查询拆分为两个,没有或条件,则速度要快得多:

select a.id,b.id from a left join b on (b.prop1=a.id)
1026 rows in set (0.03 sec)

select a.id,b.id from a left join b on (b.prop2=a.id)
1026 rows in set (0.04 sec)

要快得多,但我手动必须合并两个查询的结果。

为什么我的初始查询如此之慢?我该怎么做才能让它更快?

我使用的是mysql 5.5.35

1 个答案:

答案 0 :(得分:6)

尝试使用UNION代替OR

select a.id,b.id from a left join b on (b.prop1=a.id)
UNION ALL
select a.id,b.id from a left join b on (b.prop2=a.id)

这应该比OR

更快