23

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

最初のもの:[WHERE句なし、ONのみのAND]

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
4

3 に答える 3

16

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

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

于 2013-03-27T09:09:00.167 に答える
3

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

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

于 2013-09-08T05:24:18.007 に答える
1

理論的には、最初のクエリはテキスト比較を「where」に入れてから、テーブルの結合の「logic」の定義に結合し、「where」は比較時に変化する値を指定するためにのみ使用されます。ここで、t.name ='Leads'; よろしく

于 2014-12-02T23:07:38.320 に答える