ホームページ >データベース >mysql チュートリアル >あるテーブルには存在するが別のテーブルには存在しない行を選択するには、「NOT EXISTS」と「LEFT JOIN」のどちらの方法が最適ですか?

あるテーブルには存在するが別のテーブルには存在しない行を選択するには、「NOT EXISTS」と「LEFT JOIN」のどちらの方法が最適ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 12:01:02261ブラウズ

Which Approach is Best for Selecting Rows Present in One Table But Not Another:

効率的なデータ取得のための「Mysql select where not in table」の最適化

同一のプライマリを持つ 2 つのテーブル (A と B) を扱う場合キーを使用すると、A には存在するが B には存在しない行を選択するタスクが一般的に発生します。 "NOT EXISTS" 句を使用する標準的なアプローチには、パフォーマンスの制限があります。

Not Exists vs. Left Join

あなたが言及した "NOT EXISTS" クエリは、 A の各行に対して B に一致する行がない場合。アンチ結合として知られるこのプロセスは、大規模なデータセットでは非効率となる可能性があります。対照的に、提案された左結合アプローチでは、A の各行の B.y 列で null 値を探します。これは、より効果的な解決策となります。

クエリ式の改善

ただし、左側の結合クエリには小さな改善が加えられています。

SELECT A.*    
FROM A LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL

テーブル A (A.*) から列のみを明示的に選択することで、必要な列のみを取得してクエリを最適化します。 data.

結論

「NOT EXISTS」句は小規模なデータセットでは依然として有効なオプションですが、改良されたクエリ式を使用した左結合アプローチは、大規模なデータセットではパフォーマンスが向上します。データ量。これにより、テーブル A には存在するがテーブル B には存在しない行を効率的に取得できます。

以上があるテーブルには存在するが別のテーブルには存在しない行を選択するには、「NOT EXISTS」と「LEFT JOIN」のどちらの方法が最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。