ホームページ >データベース >mysql チュートリアル >別のテーブルに存在しない行を検索するには、NOT EXISTS サブクエリと LEFT JOIN のどちらが効率的ですか?

別のテーブルに存在しない行を検索するには、NOT EXISTS サブクエリと LEFT JOIN のどちらが効率的ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 02:13:28324ブラウズ

 Which is More Efficient: NOT EXISTS Subquery or LEFT JOIN for Finding Rows Not Present in Another Table?

別のテーブルに存在しない行に対する MySQL クエリの最適化

複数のテーブルを操作する場合、多くの場合、存在するレコードを取得する必要があります。あるテーブルにはありますが、別のテーブルにはありません。 MySQL のコンテキストでは、このシナリオに対処する一般的なアプローチが 2 つあります。NOT EXISTS サブクエリと、IS NULL チェックが続く LEFT JOIN です。

提供された例で示されているように、NOT EXISTS サブクエリのアプローチは、これには、一致する主キーに基づいて、テーブル A のレコードがテーブル B に存在しないかどうかをチェックすることが含まれます。この方法は機能しますが、レコードごとに複数のデータベース検索が必要になるため、特に大規模なデータセットの場合は非効率的になる可能性があります。

パフォーマンスを向上させるには、質問で提案されているように、代わりに LEFT JOIN を使用することを検討してください。このアプローチでは、テーブル B に一致するレコードがあるものと一致しないレコードを含む、テーブル A からすべてのレコードが返されます。その後、テーブル B の対応する列が NULL かどうかを確認することで、一致するレコードがないレコードを除外できます。

次の最適化されたクエリは、このアプローチを示しています。

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

このクエリ特に大規模なデータセットの場合、複数のデータベース検索の必要性が回避されるため、NOT EXISTS サブクエリ アプローチよりも大幅に高速に実行されます。テーブル A に固有のレコードのみを効率的に返します。

一般に、このタイプのクエリでは、より効率的でスケーラブルな LEFT JOIN アプローチが推奨されます。ただし、最適なソリューションを決定するには、データセットの特定の特性とパフォーマンス要件を考慮することが重要です。

以上が別のテーブルに存在しない行を検索するには、NOT EXISTS サブクエリと LEFT JOIN のどちらが効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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