fabzzz Posted July 5, 2013 Share Posted July 5, 2013 Bonjour à tous, J'ai un soucis avec mon nouveau prestashop 1.5.4. J'ai beaucoup de déclinaisons (environ 300/produits) et j'ai remarqué qu'une seule requête bloquait complètement le fonctionnement rapide du site (7-8 secondes pour s'executer) Voici la requête en question, elle est située dans classes/Category.php : SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, MAX(product_attribute_shop.id_product_attribute) id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` AS manufacturer_name, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new, product_shop.price AS orderprice FROM `'._DB_PREFIX_.'category_product` cp LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product` '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product`) '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').' '.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'. Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').' LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.') LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE product_shop.`id_shop` = '.(int)$context->shop->id.' AND cp.`id_category` = '.(int)$this->id .($active ? ' AND product_shop.`active` = 1' : '') .($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '') .($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '') .' GROUP BY product_shop.id_product'; Y aurait-il un moyen de réduire le temps d'execution de cette requête ? Merci d'avande pour vos réponses Link to comment Share on other sites More sharing options...
Vinum Posted July 6, 2013 Share Posted July 6, 2013 Bonjour, Malheureusement cette requête sert à récupérer toutes les infos produits par catégories. Donc tout dépend de ce que tu veux comme retour. Il est possible de la modifier via override si tu n'as pas besoin de toutes les infos mais cela risque de modifier grandement le fonctionnement de prestashop. Autre solution créé une autre fonction avec une requête plus simple qui ne récupère que les infos dont tu as besoin. Et dans le controller du front office faire appel à cette nouvelle fonction. Mais cela demande pas mal de boulot. Link to comment Share on other sites More sharing options...
fabzzz Posted July 7, 2013 Author Share Posted July 7, 2013 Merci Vinum pour ta réponse.... Pour le moment, j'ai changé cette requête par celle de la version prestashop 1.5.0.19. Le délai d'exécution est un peu plus rapide mais ce n'est pas encore ca... Je ne comprend vraiment pas, je n'avais pas ce problème de délai d'exécution quand j'étais en version presta 1.3 (j'avais pourtant le même nombre de produits et de déclinaisons) Régression ?. Je t'ai envoyé un MP vinum, si tu pouvais m'aider un peu ca serait vraiment cool ;-) Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted July 7, 2013 Share Posted July 7, 2013 Comme le dit vinum le mieux c'est de supprimer ce dont tu n'a pas besoin dans cette requête par exemple le multi boutique etc... Par contre 300 produits c'est pas énorme non plus. Peut être un module qui fit ramer ? Link to comment Share on other sites More sharing options...
fabzzz Posted July 7, 2013 Author Share Posted July 7, 2013 j'ai essayé de modifier moi même mais je suis complètement nul en sql donc je ne sais pas trop quoi modifier, effectivement multi-boutique pas besoin... Non c'est vraiment cette requete qui fait ramer avec un _PS_DEBUG_PROFILING_ à true je m'aperçois que cette requête prend 1-2 secondes pour l'exécution, j'ai réussi à "camoufler" un peu cette lenteur grâce à l'utilisation des CDN mais bon c'est pas le top bien sûr.... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now