私は 3 つのテーブルを持っています。1 つ目はcontactで、すべての連絡先とその名前、電子メールなどを含みます。2
つ目はcross_contactList_contactで、各連絡先を複数の連絡先リストに接続するためのヘルプ テーブルとしてのみ使用されます。
3 つ目は連絡先リストの名前と設定を含み、このクエリでは使用されません。
このクエリは、連絡先リストが独自のテーブルから削除された後、削除されたリスト ID を含むクロス テーブルのすべての行も削除された後に 1 回起動されます。このクエリは「クリーンアップ」のようなもので、他の連絡先リストにない連絡先があるかどうかを確認します。
問題は、DB が 1 ミルで動作する必要があることです。- 2.ミル。行ですが、テスト目的で、 5 つの異なる連絡先リストで約 70,000件の連絡先のみを使用しています (cross_contactList_contact の約 80,000 件のレコード、連絡先のいくつかは複数のリストにあり、リストの 1 つには約 60,000 件のレコードがあり、その他 < 3 000)しかし、クエリは合計で約 18 ~ 20 分実行されています。
DELETE contact FROM contact
LEFT JOIN cross_contactList_contact ON contact.id = cross_contactList_contact.contact_id
WHERE cross_contactList_contact.contactList_id IS NULL