首页 > 解决方案 > mysql group_concat 与连接不同,速度非常慢可怕的性能

问题描述

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

标签: mysqlsqlgroup-concat

解决方案


您可能会发现使用相关子查询会更好:

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如果只有少数行被更新,这将特别有用。


推荐阅读