ホームページ >データベース >mysql チュートリアル >あるテーブルから別のテーブルに存在しない行を効率的に選択するにはどうすればよいですか?

あるテーブルから別のテーブルに存在しない行を効率的に選択するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 11:49:29792ブラウズ

 How to Efficiently Select Rows from One Table that Are Not Present in Another Table?

MySQL 別のテーブルに存在しない行を選択する

共通プライマリを共有しながら、テーブル A には存在するがテーブル B には存在しないすべての行を取得するには

NOT EXISTS を使用したサブクエリの使用:

NOT EXISTS を使用したサブクエリを使用する最初のアプローチは実行可能です。

左結合の使用:

ご覧のとおり、左結合はより高速に実行できます。共有列でテーブル A とテーブル B を結合する場合、テーブル B のどの行とも一致しないテーブル A の行は、結合列に NULL 値を持ちます。これらの NULL 値をフィルター処理すると、目的の行が効果的に分離されます。

コード例:

<code class="sql">SELECT *
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;</code>

追加のヒント:

  • 両方のテーブルの結合列に適切なインデックスが作成されていることを確認します。
  • テーブル B でカバー インデックスを使用して、ディスク読み取りの数を減らします。
  • ネガティブ フィルターを使用した UNION クエリの使用を検討してください。

全体的な結論:

通常、左結合方法はサブクエリ アプローチよりも優れていますが、最適な解決策は条件に応じて異なる場合があります。特定のデータセットとスキーマ。それぞれの状況で最も効率的なアプローチを決定するには、実験とパフォーマンス テストを行うことをお勧めします。

以上があるテーブルから別のテーブルに存在しない行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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