【发布时间】:2020-07-23 13:54:56
【问题描述】:
我有以下查询需要 5 分钟以上才能执行。 您有什么建议可以优化并运行得更快吗?
SELECT if(ppa.id_product_attribute>0,CONCAT_WS('',ppl.name,' : ',pal.name), ppl.name) as PName, psp.visibility, psp.id_supplier, psp.id_manufacturer, psa.out_of_stock, psp.id_category_default, psp.id_tax_rules_group, if(ppa.id_product_attribute>0,CONCAT_WS('',psp.id_product,'-',ppa.id_product_attribute), psp.id_product) as PKey, if(ptswad.id_tot_switch_attribute_disabled>0 OR psp.active=0,0,1) as PActive, if(ppa.weight>0, psp.weight+ppa.weight, psp.weight) as PWeight, if(ppa.ean13>0, ppa.ean13, psp.ean13) as PBarcode,if(ppa.reference!='', ppa.reference, psp.reference) as PReference, es.s1_supplier_key as PSupplierKey, ep.s1_product_key as S1Key
FROM ps_product psp
LEFT JOIN ps_stock_available psa ON psa.id_product=psp.id_product
LEFT JOIN ps_product_attribute ppa on ppa.id_product=psp.id_product
LEFT JOIN ps_tot_switch_attribute_disabled ptswad on ptswad.id_product_attribute=ppa.id_product_attribute
LEFT JOIN ps_product_lang ppl on ppl.id_product=psp.id_product
LEFT JOIN ps_product_attribute_combination ppac on ppac.id_product_attribute=ppa.id_product_attribute
LEFT JOIN ps_attribute_lang pal on pal.id_attribute=ppac.id_attribute and pal.id_lang=2
LEFT JOIN erp_suppliers es on es.ps_supplier_id=psp.id_supplier
LEFT JOIN erp_products ep on ep.ps_product_id=if(ppa.id_product_attribute>0,CONCAT_WS('',psp.id_product,'-',ppa.id_product_attribute), psp.id_product)
WHERE ppl.id_lang=2 AND ppl.id_shop=1 AND psp.active=1
GROUP BY PKey
LIMIT 500,600
更新 1
主表 (ps_product) 有超过 12.000 条记录
我想如果我可以对查询结构进行任何优化,以及我应该创建哪些索引?
更新 2
谢谢
【问题讨论】:
-
您能否提供有关您的表结构和您正在搜索的数据量的更多信息?
-
还有
EXPLAIN SELECT ... -
我刚刚更新了我的第一篇文章,详细解释了
-
@ChrisEl 你还在寻找解决方案还是放弃了?
标签: mysql optimization query-optimization