【发布时间】:2016-03-14 16:10:15
【问题描述】:
我正在使用子查询来查找系统中的重复行。
SELECT * FROM locations l2 WHERE l2.id IN (
SELECT min(l1.id) FROM locations l1
GROUP BY l1.address, l1.city, l1.industry_id
HAVING count(*) > 1
)
这个查询执行得相当快,大约 0.4 秒。但是,如果我尝试在它周围包裹一个插入:
INSERT INTO duplicate_locations (
SELECT * FROM locations l2 WHERE l2.id IN (
SELECT min(l1.id) FROM locations l1
GROUP BY l1.address, l1.city, l1.industry_id
HAVING count(*) > 1
)
)
此查询需要 6 分钟 100 行。
系统上的其他一切都运行良好。表的结构相同,MyISAM,MariaDB 5.5(没有 EXPLAIN INSERT)。起初我认为这是一个表问题,但我尝试了一个新表并得到了类似的结果,所以查询肯定有问题。磁盘很好,运行时都是 CPU 负载。我能够在几秒钟内复制整个位置表(数万行)。
【问题讨论】:
-
这不是您插入结果的方式;至少这不是我所见过的。应该是
INSERT INTO table SELECT ....(没有括号)...虽然我想它可能会忽略它们。