3

パフォーマンスの面で何が優れているか知りたかったのですが、条件をJOINに入れるには? (x JOIN y on x.hi = y.hi AND ....) または、それを WHERE の下に置き、交差条件のみで JOIN を残します。

ありがとう

4

4 に答える 4

2

これは、クエリ最適化エンジンと、クエリを論理クエリ演算子に分割する方法によって異なります。

MS SQL Server では実行計画を表示できますが、オプティマイザは両方の方法を同等と見なすため、通常は違いはありません。

于 2010-01-28T14:33:20.760 に答える
1

StackOverflow hereにも同様の質問があります。

それは主に、どの構文を好むかだけの問題です。私の理解では、SQL オプティマイザーは、パフォーマンスにほとんど差をつけずにそれらを評価できるはずです。

于 2010-01-28T14:33:49.110 に答える
0

どちらもパフォーマンスの違いをもたらすとは思いませんが (ほとんどのデータベースはこの種のものを最適化できます)、左結合を使用している場合は結果に違いが生じる可能性があります。

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 句に入れることで、左結合を内部結合に変えます。

于 2010-01-28T14:37:30.970 に答える
0

さて、SQL Server 2008 R2 の WHERE 句で OUTER JOIN 構文を使用することはできません*==*

クエリに 2 つのスタイルが混在するのは見たくありません

于 2010-01-28T19:39:08.840 に答える