Я использую следующий запрос, чтобы найти пользователей, которым нужно отправлять ежедневные напоминания, основываясь на их настройках и часовом поясе.Это работает, но оказалось, что он использует около 50% ЦП и это действительно тяжело, даже когда я добавляю предел 0,100.
(он даже вызывает сбой phpMyAdmin или что-то в этом роде)
Таблица пользователей: 3000 записей, таблица сообщений: 12000+ записей, таблица настроек: 3000 записей, таблица напоминаний: 80000 записей (сохраняет user_id идата для предотвращения дублирования)
SELECT u.`id`, u.`fullname`, u.`email`, u.`hash`, s.`timezone`
FROM `users` u
LEFT JOIN `reminders` rm ON rm.`user_id` = u.`id` AND rm.`date` = CURDATE()
LEFT JOIN `settings` s ON s.`user_id` = u.`id`
LEFT JOIN `posts` p ON p.`user_id` = u.`id` AND p.`date` = DATE(CONVERT_TZ(UTC_TIMESTAMP, 'UTC', s.`timezone`))
WHERE HOUR(CONVERT_TZ(UTC_TIMESTAMP, 'UTC', s.`timezone`)) = s.`notify_hour`
AND s.`notify` = 1 AND u.`active` = 1 AND rm.`id` IS NULL AND p.`id` IS NULL
GROUP BY u.`id` LIMIT 0,100
Я выполняю этот запрос каждые 10 минут и отправляю напоминания через SMTP-сервер sendgrid.com.Не могли бы вы помочь мне оптимизировать этот запрос, чтобы он не использовал столько ресурсов?
Спасибо (и извините за мой английский)