したがって、この連絡先管理システムを構築しているとしましょう。USERテーブルとCONTACT_INFOテーブルがあります。すべてのユーザーに対して、0個以上のCONTACT_INFOレコードを持つことができます。私が定義した方法では、CONTACT_INFOテーブルに、関連するUSERレコードを指す外部キーを設定しました。
CONTACT_INFOレコードを持たないすべてのUSERレコードを検索したいと思います。
私はこれができることを期待しています:
SELECT * FROM user u WHERE u.user_id NOT IN (SELECT DISTINCT c.user_id FROM CONTACT_INFO);
私の懸念は、テーブルが大きくなるにつれて、このクエリのパフォーマンスが大幅に低下する可能性があることです。
私が遊んでいるアイデアの1つは、USERテーブルにCONTACT_INFOレコードがあるかどうかを示す列を追加することです。また、CONTACT_INFOにレコードを挿入するときに、DBMSがレコードが存在することを確認する必要がある場合、確認のためにそのレコードにすでにアクセスしているので、CONTACT_INFOレコードを更新するときに更新するべきではないのではないかと思いました。コストがかかり、パフォーマンスの面で。
いつものように、フィードバックは大歓迎です。