パフォーマンスの面で何が優れているか知りたかったのですが、条件をJOINに入れるには? (x JOIN y on x.hi = y.hi AND ....) または、それを WHERE の下に置き、交差条件のみで JOIN を残します。
ありがとう
パフォーマンスの面で何が優れているか知りたかったのですが、条件をJOINに入れるには? (x JOIN y on x.hi = y.hi AND ....) または、それを WHERE の下に置き、交差条件のみで JOIN を残します。
ありがとう
これは、クエリ最適化エンジンと、クエリを論理クエリ演算子に分割する方法によって異なります。
MS SQL Server では実行計画を表示できますが、オプティマイザは両方の方法を同等と見なすため、通常は違いはありません。
StackOverflow hereにも同様の質問があります。
それは主に、どの構文を好むかだけの問題です。私の理解では、SQL オプティマイザーは、パフォーマンスにほとんど差をつけずにそれらを評価できるはずです。
どちらもパフォーマンスの違いをもたらすとは思いませんが (ほとんどのデータベースはこの種のものを最適化できます)、左結合を使用している場合は結果に違いが生じる可能性があります。
SELECT a.field1
, a.field2
, b.field3
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id
WHERE a.field5 = 'test'
AND b.field3 = 1
SELECT a.field1
, a.field2
, b.field3
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id AND b.field3 = 1
WHERE a.field5 = 'test'
これら 2 つのクエリは、最初のクエリと同じ結果を返しません。条件を結合の代わりに where 句に入れることで、左結合を内部結合に変えます。
さて、SQL Server 2008 R2 の WHERE 句で OUTER JOIN 構文を使用することはできません*=
=*
クエリに 2 つのスタイルが混在するのは見たくありません