2

3 つのテーブルを結合する必要があります。最初のものは ~100k 行、2 つ目は ~300k 行、最後のものは ~40 行です。1 番目と 2 番目は複合条件で結合する必要がありますが、ここにトリックがあります。クエリでは、それがOR条件である必要があります。OR 条件のため、インデックスを適切に使用できません。2 つの難しいテーブルを 2 つの個別のクエリに分割し、それらをユニオンで結合して、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 に答える