ホームページ >データベース >mysql チュートリアル >あるテーブルには存在するが別のテーブルには存在しない行を選択するには、「NOT EXISTS」と「LEFT JOIN」のどちらの方法が最適ですか?
効率的なデータ取得のための「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 サイトの他の関連記事を参照してください。