0

このクエリをさらに最適化できますか。

私は取得する必要があります:

SELECT * 
FROM table1 
WHERE (column1, column2) in (SELECT c1, c2 FROM table2);

上記のクエリはサポートされていないため、次のようになります。

次のクエリがあります。

SELECT * 
FROM table1 join (SELECT c1, c2 from table2) as table3 
ON table1.column1 = c1 and table1.column2 = c2

編集:簡単にするために table2 を追加しました。でも実際は

select c1, min(c2) from table2 group by c1;
4

3 に答える 3

0

答えはノーだ。
あなたはすでに最高のクエリを持っています。通常、JOIN が最速のオプションです。ただし、列エイリアスがないと、構文エラーが発生します。エイリアスとより単純な句
で修正および簡素化されました。USING

SELECT * 
FROM   table1 t1
JOIN  (
   SELECT c1 AS column1, min(c2) AS column2
   FROM   table2
   GROUP  BY 1
   ) t2 USING (column1, column2)

パフォーマンスの鍵は、2 つの複数列インデックスです (一意または主キーの制約も機能します)。

CREATE INDEX t1_mult_idx ON table1 (column1, column2);
CREATE INDEX t2_mult_idx ON table2 (c1, c2);

このようなクエリでインデックスを使用する際の問題について、dba.SE に関するこの関連する質問に興味があるかもしれません。

于 2013-10-23T17:24:34.870 に答える