Ваша модель данных позволяет использовать несколько статусов для заказа.Таким образом, чтобы получить прямой запрос, я бы выбрал идентификатор из таблицы заказов и посмотрел статус в предложении WHERE
:
select id
from `order`
where cdate >= date '2018-01-01'
and cdate < date '2018-11-01'
and id in (select warenkorb__id from status where status = 'NEW');
(В других СУБД вместо этого можно использовать INTERSECT
, но MySQLэтого нет.)
Теперь рассмотрим два подхода:
- СУБД сначала выбирает статусы для получения заказов.
- СУБД выбираетсначала заказывает и ищет их статусы.
Для случая 1 вы хотите:
create index idx1 on status (status, warenkorb__id);
и индекс заказа (id), который у вас уже должен быть.Или даже укажите индекс покрытия:
create index idx2 on `order` (id, cdate);
Для случая 2 вы хотите:
create index idx3 on `order` (cdate, id);
create index idx4 on status (warenkorb__id, status);
Создайте эти четыре индекса, посмотрите на план выполнения и отбросьте индексы, которые использует СУБДне использует.