LEFT OUTER JOIN と NOT EXISTS: パフォーマンスに関する考慮事項
2 つのテーブル間のデータを比較する場合、一方のテーブルには存在するが、一方のテーブルには存在しない要素を選択します。その他は、LEFT OUTER JOIN または NOT EXISTS サブクエリを通じて実現できます。 LEFT OUTER JOIN などの ANSI 準拠の JOIN は SQL Server でのパフォーマンスが優れていると推測する人もいますが、実際のパフォーマンスはさまざまな要因によって異なります。
一般に、関係するフィールドに適切なインデックスがあり、フィルターで除外されることが予想される場合は、データの大部分を占める NOT EXISTS は、パフォーマンスが向上する傾向があります。これは、NOT EXISTS は EXISTS と同様にショートサーキットを利用しているためです。レコードに一致が見つかるとすぐに、そのレコードは含まれるか除外され、オプティマイザーは次のレコードに進みます。
対照的に、 LEFT JOIN は、一致するかどうかに関係なくすべてのレコードを取得し、一致しないレコードを除外します。テーブルが大きい場合、または複数の結合基準が指定されている場合、これはリソースを大量に消費する可能性があります。
したがって、一般的には、可能であれば NOT EXISTS および EXISTS が推奨されます。特に SQL Server の場合、NOT EXISTS と意味的に同等の演算子 IN および NOT IN を記述した方が便利であり、保証されたショートサーキットを提供する可能性があります。
以上がLEFT OUTER JOIN と NOT EXISTS: SQL Server ではどちらのパフォーマンスが優れていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。