クエリ パフォーマンスを最適化するための JOIN と WHERE
データベース内の複数のテーブルからデータを取得する場合、JOIN または WHERE を使用するのが一般的です。 WHERE 句を使用してそれらの間の関係を確立します。この記事では、ある方法が他の方法よりも本質的に高速であるかどうかについての議論を詳しく掘り下げます。
質問:
ドキュメントとそれに関連する統計を表す次のデータベース テーブルについて考えてみましょう。 :
CREATE TABLE Document ( Id INT PRIMARY KEY, Name VARCHAR 255 ) CREATE TABLE DocumentStats ( Id INT PRIMARY KEY, DocumentId INT, -- this is a foreign key to table Document NbViews INT )
500 を超えるビューを受け取ったドキュメントのリストを取得するには、2 つのクエリ オプションを使用します。発生:
SELECT * FROM Document, DocumentStats WHERE DocumentStats.Id = Document.Id AND DocumentStats.NbViews > 500
SELECT * FROM Document INNER JOIN DocumentStats ON Document.Id = DocumentStats.Id WHERE DocumentStats.NbViews > 500
答え:
理論的には、両方のクエリは同じ等価条件を使用して関係を確立するため、同等の結果を生成するはずです。テーブル。最新のデータベース オプティマイザーは両方の形式を効果的に処理できます。
ただし、古いバージョンの SQL Server など、一部のデータベース エンジンでは、特定の条件下でパフォーマンスに違いが生じる場合があります。提供された例では、テーブル サイズが比較的大きい場合は、2 つのテーブル間のデカルト積の必要性を回避できるため、JOIN の方が適している可能性があります。
一方、明示的な等価性を持つ WHERE 句DocumentStats.DocumentId 列に一意のインデックスがある場合、条件のパフォーマンスが向上する可能性があります。
追加考慮事項:
最適な実行計画を決定するために、使用されている実際のデータベース システムで両方のクエリ オプションをテストすることを常にお勧めします。異なるデータベース エンジンとクエリ オプティマイザーは、さまざまなシナリオで異なる動作をする可能性があります。
さらに、WHERE ではなく JOIN を選択することは、データの選択性、テーブル構造、クエリ内の追加条件の存在などの要因によって影響を受ける可能性があります。 .
以上がJOIN と WHERE: 複数テーブルのクエリではどちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。