我不知道这是不是一个好问题,但我的一个模块中有这个查询:
SELECT * FROM `product` WHERE upc IN (
SELECT `upc` FROM `product` WHERE `upc` <> '' GROUP BY `upc` HAVING COUNT(*) > 1)
ORDER BY `upc`
产品表很大,执行此查询大约需要 20 分钟。
我不是 MySQL 专家,但可以加快此查询的速度吗?
我的第二个重查询是更新查询:
UPDATE `product` SET `quantity` = '0' WHERE `sku` IN ( SELECT `id_xml_prd` FROM `ixml_prd_map` WHERE `id_xml` = '8' );
产品表上的当前索引:
在 ixml_prd_map 上:
您可以像下面那样使用 WHERE EXISTS
修改您的查询,而不是使用带有子查询的 IN
子句。
SELECT * FROM `product` p
WHERE EXISTS (
SELECT 1 FROM
`product`
WHERE `upc` <> '' AND `upc` = p.`upc`
GROUP BY `upc`
HAVING COUNT(*) > 1)
ORDER BY `upc`;
您还希望在 upc
列上建立索引。
执行普通的update join
查询而不是IN
子查询
UPDATE `product` p
JOIN `ixml_prd_map` i ON p.`sku` = i.`id_xml_prd`
AND i.`id_xml` = '8'
SET p.`quantity` = '0';
此外,为了使此 UPDATE
查询更快,在 id_xml_prd
和 ixml_prd_map
表上的 id_xml
列上有一个索引.
我是一名优秀的程序员,十分优秀!