mysql group_concat отличается от объединений очень медленной ужасной производительности - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть следующий запрос, который дает нужные мне результаты, но он ужасен с точки зрения производительности на больших БД / таблицах ... Может кто-нибудь указать, почему это так медленно, и покажите мне другой способ написания этого, чтобы он был быстрым. Мне нужно больше часа, чтобы закончить! Много оперативной памяти .. выделенный сервер, больше ничего не происходит на нем.

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;

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете найти это лучше с коррелированным подзапросом:

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.

...