以下に示す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
使用される結合がINNER JOIN
であるため、両方のクエリは同じです。 INNER JOIN
基本的には、少なくとも他のテーブルと一致する行のみをフィルタリングします。 2つのテーブルが交換されても、結果は同じです。
ただし、LEFT JOIN
を介してそれらを結合する場合、2つのクエリは互いに異なり、異なる結果をもたらします。
2つのクエリの唯一の違いは、1つのクエリがt.name = 'Leads'
はWHERE句にあり、JOIN句にはそれがあります。正しい?
2つの間に違いはありません。 SQLオプティマイザーは両方を同じように処理します。検証するために、それぞれについてEXPLAINを実行します。
理論的には、最初のクエリは単に「どこ」でテキスト比較をしたいだけで、その後、テーブルの結合の「論理」の定義に参加し、「どこ」は比較するときに変化する値を指定するためにのみ使用されますここで、t.name = 'Leads';よろしく