我是一个有用的助手,可以将文本翻译成中文。
解释结果:
提前感谢您的答案。
我有一个优化非常慢的prestashop SQL查询的问题 (mysql需要约3.5秒才能得到结果)。
查询:
SELECT
SQL_CALC_FOUND_ROWS a.*, a.id_order AS id_pdf,
CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `customer`,
osl.`name` AS `osname`,
os.`color`,
IF((SELECT COUNT(so.id_order) FROM `ps_orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new,
(SELECT COUNT(od.`id_order`) FROM `ps_order_detail` od WHERE od.`id_order` = a.`id_order` GROUP BY `id_order`) AS product_number
FROM `ps_orders` a
LEFT JOIN `ps_customer` c
ON (c.`id_customer` = a.`id_customer`)
LEFT JOIN `ps_order_history` oh
ON (oh.`id_order` = a.`id_order`)
LEFT JOIN `ps_order_state` os
ON (os.`id_order_state` = oh.`id_order_state`)
LEFT JOIN `ps_order_state_lang` osl
ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = 6)
WHERE 1
AND oh.`id_order_history` = (SELECT MAX(`id_order_history`) FROM `ps_order_history` moh WHERE moh.`id_order` = a.`id_order` GROUP BY moh.`id_order`)
ORDER BY `date_add` DESC
LIMIT 0,50
解释结果:
提前感谢您的答案。
ps_order_history
表中选择最大的id_order_history
,其中moh.id_order
= a.id_order
,按照moh.id_order
进行分组。你是否创建了适当的索引,即用于where比较的列? - Anilps_orders
so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new后运行,(SELECT COUNT(od.id_order
) FROMps_order_detail
od WHERE od.id_order
= a.id_order
GROUP BYid_order
) AS product_number,这些是否会影响性能。我还有一个关于"ORDER BYdate_add
DESC"的问题,这个date_add属于哪个表。 - AnilSQL_CALC_FOUND_ROWS
的问题 - 感谢您的帮助。 - mstraczkowski