web-dev-qa-db-ja.com

クエリパフォーマンスINNER JOIN ON AND比較

以下に示す2つのクエリのパフォーマンスに関して、どちらが最適かを知りたいのですが、同じように実行されますか?

最初の1つ:[WHERE句なし、ANDのみでON]

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

2番目:[WHERE句を使用し、ONの代わりに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
16
Rashidul Islam

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

ただし、LEFT JOINを介してそれらを結合する場合、2つのクエリは互いに異なり、異なる結果をもたらします。

10
John Woo

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

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

2
Andy Lester

理論的には、最初のクエリは単に「どこ」でテキスト比較をしたいだけで、その後、テーブルの結合の「論理」の定義に参加し、「どこ」は比較するときに変化する値を指定するためにのみ使用されますここで、t.name = 'Leads';よろしく

0
0rochimaru