supplémentaire je besoin d'une requête qui sélectionnera juste une image pour chaque produit et cette image (GROUP BY phi.id_product
) doivent être celui avec le la plus haute priorité (déclaration intérieure SELECT
avec ORDER BY
).Optimize REJOIGNEZ requête SQL avec SELECT
La priorité est stockée dans N: table M relation appelé product_has_image
J'ai créé une requête, mais il tooks environ 3 secondes pour exécuter et je dois optimiser. Ici, il est:
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
index que je trouve important dans cette requête sont:
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)
La plupart du temps se joindre aux tables en utilisant l'instruction SELECT qui est nécessaire pour le tri.
L'association avec LEFT JOIN [product_has_image] phi ON p.id = phi.id_product
est beaucoup plus rapide, mais n'attribue pas l'image avec la plus haute priorité.
Toute aide serait appréciée.
Pouvez-vous publier le plan d'exécution? –
Salut, merci pour votre réponse. Après avoir créé la vue, il faut environ 0,3 à 0,5 secondes sur ma machine et c'est encore plus rapide sur le serveur. –