使用或优化查询

时间:2013-03-08 16:00:56

标签: mysql query-optimization

我需要将三个表连接在一起。第一行有~100k行,第二行~300k行,最后一行~40行。第一个和第二个应该通过复合条件连接,但这是诀窍。该查询要求它为OR条件。由于OR条件,无法正确使用索引。我尝试将两个困难的表分成两个单独的查询,并使用union连接它们以帮助mysql找到合适的索引。

我可以做些什么来优化此查询?

select * from a, b, c where (a.x = b.x OR a.y = b.y) and b.z = c.z

3 个答案:

答案 0 :(得分:0)

尝试UNION of 2查询: -

select * 
from a
INNER JOIN b ON a.x = b.x
INNER JOIN c ON and b.z = c.z
UNION
select * 
from a
INNER JOIN b ON a.y = b.y
INNER JOIN c ON and b.z = c.z

(在实际应用中我同意不使用SELECT *)

答案 1 :(得分:0)

我首先使用ANSI连接语法,然后使用EXPLAIN来优化查询:

select * 
from a
  inner join b on a.x = b.x OR a.y = b.y
  inner join c on b.z = c.z

答案 2 :(得分:0)

你应该这样做

select 
   [your column names] 
from a
inner join b 
on a.x = b.x 
OR a.y = b.y
inner join c 
on b.z = c.z