我有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
答案 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
此外,我可能会提到,这似乎是一个很奇怪的请求