我正在尝试优化已嵌入选择的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
)
我遇到的主要问题是我想排除订单事件类型为4的订单,并保留订单事件类型为5的订单。
有人可以建议如何优化此查询吗?
我的order_events很大(650.000行)。