InnoDB mysql データベースに問題があります。たとえば、次のアーキテクチャを持つ 2 つのテーブル、events と events_artists があります。
events:
id (PK)
host_id
date
events_artists:
id (PK)
event_id
artist_id
テーブル events には約 100,000 のエントリがあり、events_artists には約 150,000 のエントリがあります。
私がしなければならないことの 1 つは、テーブル events_artists で参照されていないテーブル events のエントリをチェックすることです。そのために、別の投稿でクエリを受け取りました
SELECT * FROM events WHERE id IS NULL OR id NOT IN (SELECT event_id FROM events_artists)
ロジックから、このクエリは私には良さそうです。ただし、非常に遅いです。1時間実行しましたが、まだ結果はありません。何かが間違っている必要があります。
これを最適化する方法についての助けに感謝します!
ありがとう
チャールズ
解決策が見つかりました
次のクエリを使用すると、ステートメントが大幅に高速化されます。
SELECT *
FROM events a
LEFT JOIN events_artists b
ON a.id = b.event_id
WHERE b.event_id IS NULL;
ただし、主な速度向上は外部キーの追加でした。重複検索のために一時的にそれらを削除する必要があり、今すぐ追加し直したため、速度が大幅に向上しました。以前はクエリに 1 時間以上かかっていましたが、現在は1 秒しかかかりません。
ありがとうございました!
チャールズ