社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

mysql group_concat distinct with joins非常慢的糟糕性能

Jake • 5 年前 • 1646 次点击  

我有下面的查询,它生成了我需要的结果,但是对于大型数据库/表的性能来说,这太糟糕了。有人能告诉我为什么写得这么慢,并告诉我另一种写得这么快的方法吗?我花了一个多小时才完成!足够的内存..专用服务器上没有太多其他的东西。

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;
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46226
 
1646 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Gordon Linoff
Reply   •   1 楼
Gordon Linoff    6 年前

使用相关的子查询可能会更好:

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 正在更新。