2013-03-27 7 views
10

以下に示す2つのクエリの間でパフォーマンスが最も優れているのはどちらですか?クエリのパフォーマンスINNER JOIN ON AND AND

まず1:

SELECT related_tabid AS tabid, label, t.name 
    FROM relatedlists r 
    INNER JOIN tab t 
     ON t.tabid = r.tabid 
      AND t.name = 'Leads' 
      AND r.is_active=1 and r.related_tabid <> 0 
      AND t.is_active=1 
    ORDER BY label 

第1 [WHERE句だけオンとせず]:

SELECT related_tabid AS tabid, label, t.name 
    FROM relatedlists r 
    INNER JOIN tab t 
     ON t.tabid = r.tabid 
     WHERE t.name = 'Leads' 
      AND r.is_active=1 and r.related_tabid <> 0 
      AND t.is_active=1 
    ORDER BY label 

答えて

5
[WHERE句、どこ代わりONの関連付けられたを使用して]

使用される結合がINNER JOINであるため、両方のクエリが同じです。 INNER JOIN基本的に、それは他のテーブルに少なくとも一致する行だけをフィルタリングします。 2つのテーブルが交換であっても、結果は同じです。

ただし、LEFT JOINでそれらを結合すると、2つのクエリはそれぞれ異なる結果になります。

+0

ご回答いただきありがとうございます。私は 'LEFT JOIN'を使うとパフォーマンスが向上しますか? – Rashidul

+0

あなたの質問のための良い記事:[INNER JOINとLEFT JOINのパフォーマンス](http://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql-server) –

1

2つのクエリの唯一の違いは、WHERE句にt.name = 'Leads'があり、1つがJOIN句にあることです。正しい?

2つの間に違いはありません。 SQLオプティマイザは、それらの両方を同じように処理します。検証するために、それぞれにEXPLAINを実行します。

+0

はい、どちらも同じです。ありがとう – Rashidul

0

理論的には、最初のクエリは文字比較を 'where'に入れたいだけで、テーブルの結合の '論理'の定義に参加し、 'where'は値を指定するためにのみ使用されます比較すると異なる値 ここで、t.name = 'Leads'; お問い合わせ