2

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

3 回答 3

0

尝试 2 个查询的 UNION:-

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 *)

于 2013-03-08T16:14:18.187 回答
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
于 2013-03-08T16:14:42.440 回答
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
于 2013-03-08T16:40:57.330 回答