私は大きなプロジェクトを引き継ぎましたが、データベースが大きくなるにつれて、一部のコードが機能しなくなりました。
これがrendering_requests
最後の人を見つけるためのクエリです。カウントする必要がないため、ステータスが変更されずに記録されたログエントリが存在する場合があります。それが私が質問から理解したことです。rending_log
pending
noaction
SELECT
COUNT(rr.rendering_id) AS recordCount
FROM
rendering_request rr, rendering_log rl
WHERE
rl.rendering_id = rr.rendering_id
AND rl.status = 'pending' AND
rl.log_id = (
SELECT rl1.log_id
FROM rendering_log rl1
WHERE
rl.rendering_id = rl1.rendering_id AND
rl1.status = 'pending'
AND rl1.log_id = (
SELECT rl2.log_id
FROM rendering_log rl2
WHERE rl1.rendering_id = rl2.rendering_id AND rl2.status!='noaction'
ORDER BY rl2.log_id DESC LIMIT 1
)
ORDER BY rl1.log_id DESC
LIMIT 1
)
例えば
rendering_id=1
複数のログがあります
status=noaction
status=noaction
status=pending
と
rendering_id=2
複数のログがあります
status=noaction
status=assigned
status=noaction
status=pending
このクエリを実行すると、目的のレコードcount=1
のみが表示されるはずです。rendering_id=1
現在、このクエリは機能しなくなり、mysqlサーバーがハングします