我需要将三个表连接在一起。第一行有~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
答案 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