gpt4 book ai didi

MySQL INSERT ... SELECT ... 永无止境,CPU 处于最大状态

转载 作者:行者123 更新时间:2023-11-29 21:47:59 28 4
gpt4 key购买 nike

我需要从表中删除重复项,同时保留一项。由于在 where 语句内的子查询中访问同一个表时无法从表中删除,因此我决定将受影响的 ID 存储在临时表中:

create temporary my_temp_table (
id int not null
) engine memory;

然后使用选择插入 ID:

insert into my_temp_table
-- select query works
select
id
from
-- innodb
table_with_duplicates
where
hash_code in (
select
hash_code
from
table_with_duplicates
group by
hash_code
having
count(id) > 1
)
and date_created < '2015-01-01'
;

稍后我想使用这些ID来删除它们:

delete from table_with_duplicates
where id in (
select id from my_temp_table
)
;

仅执行插入语句的选择部分就可以正常工作。然而,添加插入部分会导致 1 个 CPU 核心达到 100%,并且查询似乎永远不会结束。没有插入任何内容。在我的开发环境中,table_with_duplicates 包含大约 20000 行,其中有 1 个重复项。有什么想法吗?

编辑:谢谢您的回答。我尝试过 select unique(... 方法,这没有多大帮助。也许我在错误的地方/子选择中使用了。已经玩了很多次了。澄清一下,我有这样的东西:

ID    date_created    hash_code
1 2013-06-06 ABCDEFGH <-- delete this one
2 2013-08-08 HGFEDCBA
3 2015-11-11 ABCDEFGH <-- keep this one

最佳答案

好吧,我选择了不同的方法来解决这个问题。我编写了一个小型 PHP 命令行脚本,它将所有 ID 提取到一个数组中,然后执行 DELETE,使用所有 ID 作为 ....

"delete from table_with_duplicates where id in (".explode(',' $arrIDs).")";

大约有 9000 行受影响,并且(希望)这是一次性操作,这对我有用。

我也玩过

SET SESSION optimizer_search_depth = 1;

但也没有运气。

关于MySQL INSERT ... SELECT ... 永无止境,CPU 处于最大状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com