使用大数据更新查询优化

时间:2019-08-29 07:08:03

标签: mysql laravel query-optimization

我有products和category表,以及一个名为product_catalog的数据透视表,我需要更新product_catalog表,以便可以删除少于五个产品的类别。这些冗余类别中的那些产品应移至其父类别。我为此写了一个查询,但是问题是此product_catalog表中包含55213277个记录,并且运行需要很多时间。 基本上,这是一个嵌套查询,我们必须运行该查询多次,除非没有剩余少于五个产品的类别。 这是我测试过的SQL查询。

能给我提出一个优化的解决方案吗?

UPDATE product_catalogT AS C
       INNER JOIN
   (SELECT
       COUNT(*) AS tp, catalog_id cid, g.parent_id pid
   FROM
       product_catalog AS p
   LEFT JOIN catalog AS g ON p.catalog_id = g.id
   Where g.parent_id <> 0
   GROUP BY catalog_id
   HAVING tp < 5)
   AS A ON C.catalog_id = A.cid
SET
   C.catalog_id = A.pid

1 个答案:

答案 0 :(得分:0)

这里的文字要少一些,但是为了提高性能,我们需要查看表,索引和EXPLAIN,如上所述。

 UPDATE product_catalogT C
  JOIN
     ( SELECT p.catalog_id
         FROM product_catalog p
        JOIN catalog g 
          ON p.catalog_id = g.id
        Where g.parent_id <> 0
       GROUP 
            BY catalog_id
       HAVING COUNT(*) < 5
     ) A 
    ON C.catalog_id = A.cid
   SET C.catalog_id = A.pid

此外,我可能会提到,这似乎是一个很奇怪的请求