@Classic1988

Как оптимизировать WHERE IN в запросе, когда значений очень много?

Доброго времени суток. Прошу помощи в решении моей проблемы.

SELECT `price`,`currency`,`status` FROM `orders` WHERE `currency` = $currency AND `date_add` >= $q[0] AND `date_add` <= $q[1] AND `user_id` IN ($ids)


Нужно получить суммы заказов за определенный период (это всегда неделя, например, от 18.01.21 00:00:00 до 24.01.21 23:59:59) в нужной валюте, нужного партнера и получить весь массив заказов. Проблема в том что у партнера много приглашенных клиентов сейчас больше 2.5 тыс (растет с каждым днём) - это и есть значение переменной $ids в WHERE IN. Заказов в неделю больше 3 миллионов. Информация по заказам хранится месяц, все что раньше - переносится в другую базу и удаляется. Сейчас в таблице 12 миллионов строк. Такой запрос выполняется очень долго. Можете подсказать как ускорить и оптимизировать этот процесс? Объединённый индекс по currency, date_add, user_id имеется
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
JOIN users ON users.id = orders.user_id
WHERE ... AND users.partner_id = $partner_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы