@siroper

Как упростить запрос sql?

Здравствуйте. Имеется 2 таблицы в БД, одна с товарами, другая с историей заказов каждого товара.

products:
[id]--[name]--[price]

orders_products:
[id]--[product_id]--[order_id]--[count]--[price]

order_id - id заказа
count - количество данного продукта в заказе
price - цена единицы


products примерно 10 000
orders_products примерно 50 000

Мне нужно вывести товары и посчитать сколько заказов каждого было, но мой запрос занимает около 500 секунд в mysql, жесть.

SELECT  p.*, COUNT(op.count) AS countorders
FROM    products p
LEFT JOIN
        orders_products op
ON      op.product_id = p.id
WHERE   1
GROUP BY
        p.id
ORDER BY
        p.id ASC
LIMIT 25


Как упростить в плане производительности запрос?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
SELECT  
    p.*, 
    (SELECT COUNT(op.count) FROM orders_products op WHERE op.product_id = p.id) AS countorders
FROM    products p
ORDER BY p.id ASC
LIMIT 25

Нужно убедиться, что на op.product_id есть индекс, а лучше foreign key, чтобы еще и целостность данных соблюдалась автоматически.
В таком виде и с таким ограничением при наличии упомянутого индекса запрос должен занимать миллисекунды
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы