мне нужен запрос, который будет выбрать только один (GROUP BY phi.id_product
) изображения для каждого продукта и этот образ должен быть один с (внутренним SELECT
с ORDER BY
заявление) в наивысший приоритет.Оптимизировать JOIN SQL запрос с дополнительным SELECT,
приоритет сохраняется в N: M отношение таблица называется product_has_image
Я создал запрос, но это около 3 Натальи принимает секунды для выполнения, и мне нужно оптимизировать. Вот оно:
SELECT p.*, i.id AS imageid
FROM `product` p JOIN `category` c on c.`id` = p.`id_category`
LEFT OUTER JOIN (SELECT id_product, id_image FROM
`product_has_image` ORDER BY priority DESC) phi ON p.id = phi.id_product
LEFT OUTER JOIN `image` i ON phi.id_image = i.id
WHERE (c.`id_parent` = 2 OR c.`id` = 2)
GROUP BY phi.id_product
Индексы, которые я считаю важными в этом запросе, являются:
image (PRIMARY id)
product_has_image (PRIMARY id_product, id_image; INDEX id_product; INDEX id_image)
product (PRIMARY id, id_category; INDEX id_category)
category (PRIMARY id; INDEX id_parent)
Большую часть времени занимает соединения таблиц с помощью SELECT, заявление, которое требуется для сортировки.
Соединение с LEFT JOIN [product_has_image] phi ON p.id = phi.id_product
происходит намного быстрее, но не присваивает изображение с наивысшим приоритетом.
Любая помощь будет оценена по достоинству.
Можете ли вы опубликовать план выполнения? –
Привет, спасибо за ваш ответ. После создания представления он занимает около 0,3 - 0,5 секунды на моей машине, и он еще быстрее на сервере. –