Проблемы производительности после нормализации базы mysql
Есть таблица заказов orders и таблица статусов orders_status в которой хранится id, order_id, status_id, date
У каждого заказа, к примеру, до 10 статусов, таким образом получается что бы взять все статусы мне нужно сделать 10 join, но это занимает много времени при составлении отчета по большому количеству заказов. Можно ли как-то избежать большой нагрузки из-за большого количества join к одной таблице или только путем денормализации?
мои попытки решения с множественным join
SELECT *,
s1.date AS status_1,
s2.date AS status_2
FROM orders o
JOIN orders_status s1
ON s1.status_id = 1
AND s1.order_id = o.id
JOIN orders_status s2
ON s2.status_id = 2
AND s2.order_id = o.id
и так далее
Ответы (1 шт):
Автор решения: Герман Борисов
→ Ссылка
Вот так делается то, о чем писал @Konst в комментарии
SELECT
o.*,
MAX(CASE WHEN s.status_id = 1 WHEN s.date END) as status_1,
MAX(CASE WHEN s.status_id = 2 WHEN s.date END) as status_2
FROM orders o
LEFT JOIN orders_status s ON s.order_id=o.id
GROUP BY o.*