Здравствуйте. Имеется 2 таблицы в БД, одна с товарами, другая с историей заказов каждого товара.
orders:
[id]--[date]--[status]
products:
[id]--[name]--[price]--[active]
orders_products:
[id]--[product_id]--[order_id]--[count]--[price]
order_id - id заказа
count - количество данного продукта в заказе
price - цена единицы
products примерно 10 000
orders_products примерно 50 000
Запрос работает, занимает 700 миллисек:
SELECT p.*,
(
SELECT COUNT(op.id)
FROM orders_products op
LEFT Join orders o
ON op.order_id = o.id
WHERE
op.item_id = p.id AND
o.date > "2020-01-01" AND
o.status != 2
) AS ordersCount,
(
SELECT SUM(op.count)
FROM orders_products op
LEFT Join orders o
ON op.order_id = o.id
WHERE
op.item_id = p.id AND
o.date > "2020-01-01" AND
o.status != 2
) AS countOrdersCount,
(
SELECT SUM(op.price * op.count)
FROM orders_products op
LEFT Join orders o
ON op.order_id = o.id
WHERE
op.item_id = p.id AND
o.date > "2020-01-01" AND
o.status != 2
) AS ordersSum
FROM products p
WHERE p.active='1'
ORDER BY p.id DESC
LIMIT 0,25
Но если я делаю сортировку по количеству заказов / продаж / суммы продаж, например вместо
ORDER BY p.id DESC
- ставлю
ORDER BY ordersCount DESC
, то запрос занимает порядка 350 секунд!
Как в такой конструкции можно сделать более отзывчивую в плане скорости запроса сортировку по ordersCount / countOrdersCount / ordersSum?