次のクエリは、テーブル a に約25.000行を超えると、突然非常に遅くなります (まったく終了しないようです) (クエリに制限 x を追加してみました)。
select a.*, b.column
from table_a a
left join table_b b
on (a.message_id = b.message_id)
where date_sub(curdate(), interval 30 day) < a.date
and (
b.message_id is NULL or
(
b.message_id is not NULL
and a.message_id = b.message_id
and b.redeemed > 0
)
)
order by a.id DESC
と の両方に索引がa.message_id
ありb.message_id
ます。table_a よりもはるかに多くの行がありますtable_b
左結合とis NULLの組み合わせにより、mysql サーバーが限界に達することは理解していますが、左結合を回避するためにクエリを書き直す方法がわかりません。
基本的に、テーブル a にクエリを実行し、テーブル b に一致するエントリがあるかどうかを確認します。その場合は、テーブル b の日付を結果に統合したいと考えています。
どんな助けでも大歓迎です!