ホームページ >データベース >mysql チュートリアル >SQL クエリでは、WHERE 句または結合基準フィルターの方が高速ですか?
結合基準と Where 句のどちらの SQL クエリが高速ですか?
この質問では、結合でのフィルタリングという 2 つのクエリ構造のパフォーマンスを比較します。基準と WHERE 句の使用。一般に、結合基準に基づくフィルタリングは結果セットを早く減らすため高速であると考えられていますが、この考えが常に当てはまるとは限りません。
クエリ比較
見てみましょうフィルターの配置を除いて同一の構造を持つ 2 つのクエリを調べます:
クエリ 1 (結合時のフィルター)基準)
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1;
クエリ 2 (WHERE 句のフィルター)
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID AND a.ID = 1;
パフォーマンス テスト
どのクエリが高速であるかを判断するために、パフォーマンス テストが実施されました。結果から、WHERE 句でのフィルタリングは結合基準を使用するよりもわずかに高速であることがわかりました。経過時間の差は最小限でした:
論理的な一貫性
パフォーマンスは重要な考慮事項ですが、論理的な一貫性も同様に重要です。 WHERE 句のフィルタリングは、左結合のセマンティクスと一致します。次のクエリを考えてみましょう:
結合基準でフィルタを使用した左結合
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID AND a.ID = 1 LEFT JOIN TableB b ON x.TableBID = b.ID;
WHERE 句のフィルタを使用した左結合
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID LEFT JOIN TableB b ON b.id = x.TableBID WHERE a.id = 1;
左結合の場合、WHERE 句フィルターにより次のことが保証されます。右側結合が存在するかどうかに関係なく、指定された ID に対して一致する行のみが返されます。この動作は論理的に一貫性があり、理解しやすいです。
結論
パフォーマンスの違いは無視できますが、WHERE 句でのフィルタリングはわずかに高速で、論理的に一貫性が高くなります。特に左結合を操作する場合。したがって、一般的には、パフォーマンスと読みやすさの両方を考慮して、フィルターを WHERE 句に配置することをお勧めします。
以上がSQL クエリでは、WHERE 句または結合基準フィルターの方が高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。