我有以下查询可以产生所需的结果,但是就大型数据库/表的性能而言,这是可怕的。.有人可以指出为什么它这么慢,并向我展示另一种写此方法的方法,以便它如此之快。我需要一个多小时才能完成!大量的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;

最佳答案

您可以通过关联子查询找到更好的方法:

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中的少数行,这将特别有用。

关于mysql - mysql group_concat与连接不同,性能非常缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53370145/

10-16 21:47