Я думаю, что решение для моей проблемы не должно быть затруднено, но у меня появляется головная боль, так как я не могу найти решение самостоятельно.Оптимизация группы по запросу
Для веб-магазина я пытаюсь создать простой запрос, который выбирает самую низкую и самую высокую цену для всех продуктов определенной категории. Теперь проблема, я имею прямо сейчас, состоит в том, что почти все продукты имеют разные типы (скажем, 40-дюймовый телевизор, 42-дюймовый телевизор, 46 дюймов). Теперь я хотел бы использовать только самую низкую цену для каждого product_id, когда я пытаюсь получить самую низкую и максимальную цену всех продуктов. Мне удалось это сделать, однако запрос слишком медленный из-за предложения Group By. Запрос занимает около 40 секунд. Любые идеи по оптимизации этого запроса?
SELECT MIN(product_price), MAX(product_price)
FROM products_inventory
WHERE inventory_id IN (
SELECT pi.inventory_id
FROM products_inventory pi
JOIN products p ON p.product_id = pi.product_id
JOIN category_products cp ON cp.product_id = p.product_id
WHERE cp.category_id IN (4,5,6,118)
GROUP BY product_id
ORDER BY product_price
)
Пример того, как таблицы выглядит следующим образом:
products: product_id, product_name
products_inventory: inventory_id, product_id, product_price
category_products: category_id, product_id
Как просили, вот некоторые примерные данные:
products:
1, lg tv
2, samsung tv
products_inventory
1, 1, 500
2, 1, 750
3, 1, 800
4, 2, 450
5, 2, 600
category_products
1, 1
1, 2
На основе выборки данных вывод запроса должно быть: 450 - 500
Вы проиндексировали поля, включенные в предложение WHERE? – opalenzuela
IN с SELECT действительно плохая идея .... это как ORing сотни или миллион значений .... –
Да, поля в индексе where все индексируются – Shiraz