ジョーのリンクは良い出発点です。 Quassnoiもこれをカバーしています。
一般的に フィールドに適切なインデックスが付けられている場合、またはより多くのレコードを除外する予定の場合(つまり、行がたくさんある場合 EXIST
サブクエリ内)NOT EXISTS
パフォーマンスが向上します。
EXISTS
およびNOT EXISTS
両方の短絡-レコードが基準に一致するとすぐに、レコードは含まれるかフィルターで除外され、オプティマイザーは次のレコードに移動します。
LEFT JOIN
すべてのレコードに参加します 一致するかどうかに関係なく、一致しないすべてのレコードを除外します。テーブルが大きい場合や、複数のJOIN
がある場合 基準では、これは非常に多くのリソースを消費する可能性があります。
私は通常、NOT EXISTS
を使用しようとします およびEXISTS
可能であれば。 SQL Serverの場合、IN
およびNOT IN
意味的に同等であり、記述しやすい場合があります。 これらは、SQLServerで短絡が保証されている唯一の演算子の1つです。