我有以下查询,该查询可产生所需的结果,但就大型数据库/表的性能而言,这是可怕的。.有人可以指出为什么它这么慢,并向我展示另一种写此方法的方法,以便如此之快。我需要一个多小时才能完成!大量ram ..专用服务器没有太多其他操作。
UPDATE feed.product fp
LEFT JOIN ( SELECT p.date_upd, p.id_product, GROUP_CONCAT(DISTINCT(CONCAT ('https://www.example.com/', pi.`id_image`,'-x_shop/',pl.link_rewrite,'.jpg')) SEPARATOR ",") AS images
FROM db.products p
LEFT JOIN db.image pi ON (p.id_product = pi.id_product)
LEFT JOIN db.product_lang pl ON (p.id_product = pl.id_product)
GROUP BY p.id_product
) s ON fp.id_product = s.id_product
SET fp.images = s.images
WHERE fp.image_updated = 1;
答案 0 :(得分:0)
通过相关子查询,您可能会发现更好的选择:
UPDATE feed.product fp
SET fp.images = (SELECT GROUP_CONCAT(DISTINCT(CONCAT ('https://www.example.com/', pi.`id_image`,'-x_shop/',pl.link_rewrite,'.jpg')) SEPARATOR ",") AS images
FROM db.image pi JOIN
db.product_lang pl
ON pi.id_product = pl.id_product
WHERE fp.id_product = pi.id_product
)
WHERE fp.image_updated = 1;
如果仅更新fp
中的少数行,这将特别有用。