@AfterGlow93 J'ai essayé de repartir sur une base propre en réimportant mes données table par table (peut-être est-ce long parce que j'oublie des tables ?) Voici un exemple quand j'essaie de charger la liste des produits dans le backoffice. Je suis allé chercher la requête en question:
SELECT SQL_CALC_FOUND_ROWS p.`id_product` AS `id_product`, p.`reference` AS `reference`, sa.`price` AS `price`, p.`id_shop_default` AS `id_shop_default`, p.`is_virtual` AS `is_virtual`, pl.`name` AS `name`, pl.`link_rewrite` AS `link_rewrite`, sa.`active` AS `active`, shop.`name` AS `shopname`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`, 0 AS `price_final`, pd.`nb_downloadable` AS `nb_downloadable`, sav.`quantity` AS `sav_quantity`, IF(sav.`quantity` <= 0, 1, 0) AS `badge_danger` FROM `product` p LEFT JOIN `product_lang` pl ON (pl.`id_product` = p.`id_product` AND pl.`id_lang` = 1 AND pl.`id_shop` = 1) LEFT JOIN `stock_available` sav ON (sav.`id_product` = p.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1 AND sav.id_shop_group = 0) JOIN `product_shop` sa ON (p.`id_product` = sa.`id_product` AND sa.id_shop = 1) LEFT JOIN `category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.id_shop = 1) LEFT JOIN `category` c ON (c.`id_category` = cl.`id_category`) LEFT JOIN `shop` shop ON (shop.id_shop = 1) LEFT JOIN `image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = 1) LEFT JOIN `image` i ON (i.`id_image` = image_shop.`id_image`) LEFT JOIN `product_download` pd ON (pd.`id_product` = p.`id_product`) WHERE (1 AND state = 1) ORDER BY `id_product` DESC LIMIT 0 , 20
Voici le résultat du EXPLAIN:
La requête met 85 secondes à retourner les 20 résultats attendus 😅 (et quand j'essaie de charger une fiche produit avec le module cross sells, je me prends un 504 gateway, la requête fait fait des jointures entre order_detail, product, product_shop, product_attribute, product_attribute_shop, stock_available, product_lang category_lang, image et il y a un where sur 4000 order_id 🤣 ; quand j'enlève le module cross sells j'ai plus de problème)
Une idée ? 👀
Edit: Quand je retire les lignes qui font des jointures sur image et image_shop, la requête s'exécute en 0,015 secondes 🤔 J'ai vérifié, mais les indexes existent bien sur les tables concernées...