ホームページ >データベース >mysql チュートリアル >NOT IN と NOT EXISTS: データベース クエリに NOT EXISTS を選択する必要があるのはどのような場合ですか?
NOT IN と NOT EXISTS の違い
データベースクエリの分野では、NOT IN を使用するか NOT EXISTS を使用するかという問題によく遭遇します。実行計画はパフォーマンスが類似していることを示している場合がありますが、選択する際に考慮すべき微妙な違いがいくつかあります。
存在しないことを希望します
一般的に、多くの人は最初に NOT EXISTS を選択することをお勧めします。これは主に、クエリに含まれる列が将来 null になる可能性がある状況を処理する際に、より堅牢であるためです。
NULL 値の処理
列が NULL 可能である場合、NOT IN は NOT EXISTS とは異なる動作をします。 NOT IN は結果から NULL 値を明示的に除外しますが、NOT EXISTS はサブクエリが NULL 値を返す行のみを除外します。
これを説明するために、次のクエリを考えてみましょう:
<code class="language-sql">SELECT ProductID, ProductName FROM Products p WHERE p.ProductID NOT IN ( SELECT ProductID FROM [Order Details] )</code>
[注文詳細] テーブルの ProductID 列に NULL 値を含めることができる場合、このクエリは、関連付けられた注文がないすべての製品、または [注文詳細] テーブルの ProductID が NULL であるすべての製品を返します。一方、NOT EXISTS を使用した次のクエリは、注文が関連付けられていない商品のみを返します:
<code class="language-sql">SELECT ProductID, ProductName FROM Products p WHERE NOT EXISTS ( SELECT 1 FROM [Order Details] od WHERE p.ProductId = od.ProductId )</code>
実行計画の影響
実行プランでは 2 つのクエリが同一に実行されることが示されている可能性がありますが、列の NULL 値許容度における特定の変更により、この動作が変更される可能性があります。列が NULL 可能になり、NOT IN が使用される場合、クエリは NULL 値の追加チェックを実行する必要があり、パフォーマンスに悪影響を及ぼす可能性があります。
結論
NOT IN および NOT EXISTS を選択する場合は、クエリに含まれる列の潜在的な NULL 可能性を常に考慮してください。 NOT EXISTS は、NULL 値の処理における堅牢性と明確性を提供するため、ほとんどのシナリオで推奨されます。
以上がNOT IN と NOT EXISTS: データベース クエリに NOT EXISTS を選択する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。