SQL クエリのフィルタ基準: Join 句と Where 句
SQL でデータをクエリする場合、フィルタ基準を適用するには 2 つの一般的な方法があります。 : 結合基準と Where 句。開発者は、どちらのアプローチがより効率的であるかという問題によく悩まされます。
質問:
どちらの SQL クエリがより高速に実行されるか: 結合基準にフィルターを適用するものと、どこで句?
分析:
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 AND a.ID = 1 INNER JOIN TableB b ON x.TableBID = b.ID;
パフォーマンスの比較:
経験的に、Where 句が結合基準よりもわずかに高速であることがテストで明らかになりました。結合基準によって結果セットがすぐに削減されると予想されるため、これは直観に反します。
論理的一貫性:
パフォーマンスとは別に、各アプローチの論理的一貫性を考慮してください。 Where 句を使用すると、結合が左結合に置き換えられた場合でも操作が有効なままになります。
推奨アプローチ:
パフォーマンスと論理的一貫性に基づいて、一般に、Where にフィルター基準を適用することをお勧めします。 Clause.
例:
次のクエリを考えてみましょう:
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;
このクエリは論理的に適切であり、以下の同等のクエリと同様に実行されます。結合のフィルターCriteria.
結論:
結合基準と Where 句はパフォーマンスの観点からは同様に機能しますが、Where 句は論理的により一貫性があるため、適用する場合に推奨されるアプローチです。 SQL クエリのフィルター条件。
以上がフィルタリングの JOIN 句と WHERE 句: どちらの SQL クエリが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。