Оптимизация SQL-запроса с большим количеством записей в таблице - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь оптимизировать SQL-запрос со встроенными выборками:

SELECT *
  FROM orders o
    LEFT JOIN alarms a ON o.id = a.order_id
    INNER JOIN order_events o4_ ON o.id = o4_.order_id AND (o4_.event_type_id IN (6, 4, 5, 9))
    LEFT JOIN event_types et ON o4_.event_type_id = et.id
WHERE o.arrival > '2018-01-01'
  AND o.arrival <= '2018-12-31'
  AND EXISTS (SELECT 1
    FROM order_events as o_e
    WHERE o_e.order_id = o.id
    AND o_e.event_type_id = 4
  )
  AND NOT EXISTS (SELECT 1
    FROM order_events as o_e
    WHERE o_e.order_id = o.id
    AND o_e.event_type_id = 5
  )

Основная проблема, с которой я столкнулся, заключается в том, что я хочу исключить ордера с типом order_events 4 и сохранить ордера с типом order_events 5.

Может кто-нибудь подсказать, как оптимизировать этот запрос?

Мои order_events огромны (650 000 строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...