2017-02-17 7 views
0

内部結合と左結合の両方で同じ結果を得ることができますが、どちらが速く、パフォーマンスが優れていますか(特に大規模データの場合)内側内部結合対左側結合 - 同じ結果に対してより高速ですか?

参加:

SELECT * 
FROM Table_A A 
INNER JOIN Table_B B 
ON A.PK_A = B.PK_B 

左ジョイン:

SELECT * 
FROM Table_A A 
LEFT JOIN Table_B B 
ON A.PK_A = B.PK_B 

WHERE A.PK_A = B.PK_B 

表A:

PK_A User 
1 FOX 
2 COP 
3 TAXI 
6 WASHINGTON 
7 DELL 
5 ARIZONA 
4 LINCOLN 
10 LUCENT 

Table_B:

PK_B Message 
1 TROT 
2 CAR 
3 CAB 
6 MONUMENT 
7 PC 
8 MICROSOFT 
9 APPLE 
11 SCOTCH 

アイデア?大規模なデータでパフォーマンスをテストするにはどうすればよいですか?

+4

なぜ、LEFT JOINを使用してINNER JOINをしたいのですか? – jarlh

+2

2番目のものは無意味ではありません。 where句は、左結合を内部結合として動作させます。 – GurV

+1

これは他のテストと同じ方法でテストします。クエリを実行する前後の時間をミリ秒単位で取得し、減算します。 –

答えて

8

をクエリオプティマイザは、あなたがinner joinを望んでいたことを理解し、代わりにそれを使用するために十分にスマートであるWHERE A.PK_A = B.PK_Bを追加することにより願っています。 同じ実行計画が作成されるため、同じパフォーマンスが得られます。

enter image description here のであなたがinner joinをしたいときには、それだけで維持し、理解してイライラすることになるキーにwhereleft joinを使用することはありません。

+0

良い写真ですが、パフォーマンスについて質問されました。 –

+0

正しい答え。 'JOIN ON'ではなく' WHERE'の条件を持つ外部結合は、 'INNER JOIN'として扱われます。 – Rahul

+0

@DanBracuk私の答えで述べたように、_同じ実行計画が作成されるので、同じパフォーマンスを持ちます_ – Magnus

1

左結合と内結合は異なる目的を解決します。 実行計画を実行することにより、クエリのパフォーマンスを確認できます。クエリが使用しているすべてのインデックス、スキャンしている行の数などを表示します。 同じベンダーのWebサイトで利用可能なチュートリアルがあります。

2

まず、内部結合と左結合は同じではありません。 INNERはのJOIN両方のテーブルの間で共通しているすべてのレコード

LEFTが LEFTリンクテーブルからすべてのレコードを取得しますが、何の関連レコードが存在しない場合は、右側のテーブルから一部の列を選択した場合、これらのJOIN取得列にNULLが含まれます。

パフォーマンスの点で明らかに、内部結合は高速です。 は、それはあなたを助ける:)

+1

理論的には、内部結合は常により速くなります。実生活では、私は彼らが左の結合からより良いパフォーマンスを観察していると言っている同僚を持っています。 –

+0

正確に何を検索したいかによって異なります。 左テーブルからのみデータを取得したい場合はLEFTを使用します。結合は速くなりますが、両方のテーブルに共通するすべてのデータが必要な場合は、INNER結合がLEFT – CSK

+0

@ DanBracukよりもはるかに効率的です。内部結合の直後に左結合を実行する - または? – jarlh

関連する問題