存在
EXISTSは、文字通り、指定された基準の存在をチェックするためのものです。現在の標準SQLでは、比較のために複数の基準を指定できます(col_aとcol_bの両方がいつ一致するかを知りたい場合はIE)。これにより、IN句よりも少し強力になります。 MySQL INはタプルをサポートしていますが、構文は移植性がないため、読みやすさと移植性の両方の点でEXISTSの方が適しています。
EXISTSで注意すべきもう1つのことは、その動作方法です。EXISTSはブール値を返し、最初の一致でブール値を返します。したがって、重複/複数を処理している場合、データとニーズに応じて、EXISTSの実行はINまたはJOINよりも高速になります。
IN
INは、OR句のシンタックスシュガーです。非常に順応性がありますが、その比較のために多くの値(1,000の北)を処理することには問題があります。
しない
NOT演算子は、ロジックを逆にするだけです。
サブクエリとJOIN
親に対して複数の子レコードがある場合、JOINは結果セットを膨らませるリスクがあるため、「常に結合を使用する」というマントラには欠陥があります。はい、DISTINCTまたはGROUP BYを使用してこれに対処できますが、これにより、JOINmootを使用することによるパフォーマンス上の利点が得られる可能性が非常に高くなります。データと、結果セットに必要なものを理解してください。これらは、パフォーマンスの高いSQLを作成するための鍵です。
いつ、なぜ何を使用するかを知ることを繰り返す-LEFT JOIN IS NULLは、比較される列がnull許容でない場合、MySQLで最速の除外リストです それ以外の場合は、NOT IN /NOTEXISTSの方が適しています。
参照:
- MySQL:LEFT JOIN / IS NULL、NOT IN、NOT EXISTS ON nullable columns
- MySQL:LEFT JOIN / IS NULL、NOT IN、NOT EXISTS ON NOT nullable column