Как я снизил нагрузку на базу данных в 53 раза с помощью ChatGPT

Недавно запустил Telegram-бота для мониторинга сайтов. Он раз в 10 минут проверяет сайты, добавленные пользователями. Постепенно их проверка стала занимать существенное время.
Сначала я думал, что проблема в медленных сайтах и долгих ответах whois. Потом замерил разные участки кода и понял, что примерно 3 секунды для каждого из сайтов отрабатывает запрос к моей же базе данных (MySQL). С помощью него я получаю результаты предыдущих проверок: последней и последней успешной. Это нужно, чтобы сравнить с текущим результатом и уведомить пользователя об изменениях.
Запрос выглядел примерно так:
SELECT *
FROM
checks c
LEFT JOIN (
SELECT *
FROM checks c2
WHERE c2.id = (
SELECT MAX(c3.id)
FROM checks c3
WHERE c3.db_message_id = c2.db_message_id
AND c3.response_received = true
)
) AS sub
ON c.db_message_id = sub.db_message_id
WHERE
c.db_message_id = :db_message_id
ORDER BY c.id DESC
LIMIT 1;
Я попросил ChatGPT o1-preview оптимизировать код, его предложение:
SELECT *
FROM
(SELECT *
FROM checks
WHERE db_message_id = :db_message_id
ORDER BY id DESC
LIMIT 1) c
LEFT JOIN
(SELECT *
FROM checks
WHERE db_message_id = :db_message_id AND response_received = true
ORDER BY id DESC
LIMIT 1) c2
ON 1=1;
Время обработки сайтов снизилось примерно в 10 раз, нагрузка на базу — в 53.
Кажется, подписка окупилась.