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

Mar*_*son 3 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)
Run Code Online (Sandbox Code Playgroud)

如果我将查询分成两个,没有或条件,它会快得多:

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)
Run Code Online (Sandbox Code Playgroud)

更快,但我手动必须结合两个查询的结果.

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

我正在使用mysql 5.5.35

Tik*_*kes 6

尝试并使用a 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)
Run Code Online (Sandbox Code Playgroud)

这应该比它更快 OR

  • `UNION ALL` 不会删除重复项。`UNION` 确实如此。 (2认同)
  • 我告诉过你......在第二个选择中调整为(b.prop2 = a.id和b.prop1 <> a.id). (2认同)