Как я снизил нагрузку на базу данных в 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.
Кажется, подписка окупилась.
