【发布时间】:2019-05-09 14:55:30
【问题描述】:
select * from table1 where ID in (
select min(a.ID) from (select * from table1) a group by id_x, id_y, col_z having count(*) > 1)
上述查询在 2.2 秒内运行,返回四个结果。现在,当我将select * 更改为delete 时,它会无限期挂断。
delete from table1 where ID in (
select min(a.ID) from (select * from table1) a group by id_x, id_y, col_z having count(*) > 1)
如果我在别名选择查询中移动group by 子句的位置,它将不再挂起。
delete from table1 where ID in (
select a.ID from (select min(ID) from table1 group by id_x, id_y, col_z having count(*) > 1) a)
为什么会挂起?尽管(select * from table1) 提取了数百万条记录,但查询似乎并没有停止执行几个小时。任何人都可以解释是什么使查询变得混乱吗?这让我感到困惑,因为选择查询工作正常,而删除查询挂起。
编辑: 我的重点是它为什么挂起。我已经发布了工作正常的解决方法。但是为了开发预防系统,我需要找到它的根本原因..
【问题讨论】:
-
MySQL 在优化
WHERE ID IN (SELECT ...)方面很差劲。请改用JOIN。 -
你几天前也问过同样的问题吗?我确定我记得最近回答过这样的问题,但我现在找不到了。我回答后你删了吗?
-
如果您认为它不应该作为重复而关闭,您应该请求重新打开它,而不是再次发布相同的问题。
-
我已经请求通过两次编辑重新打开另一个问题。然而,它似乎从未引起人们的注意。你还没有回答另一个问题。另外,另一个问题不是重复的