由于行数过多,删除时未完成联接



我有一个大约有550k行的表。我正在尝试执行这个查询:

DELETE t1 FROM categories t1
INNER JOIN categories t2
WHERE t1.id < t2.id
AND t1.name = t2.name
AND t1.book_id = t2.book_id

不幸的是,外壳冻结了,我可以通过计算另一个外壳中的行来判断什么都没有发生。

有什么方法可以缓冲这个查询,或者用另一种方式解决这个问题吗?

感谢您的帮助。

如果需要删除大量行,通常更有效的方法是将要保留的行移动到另一个表,截断原始表,然后再插入其中:

-- move the rows we want to keep
create table t1_tmp as 
select name, book_id, min(id) id from t1 group by name, book_id;
-- empty the table - back it up first! 
truncate table t1;
-- insert back into the table
insert into t1 (id, name, book_id) 
select id, name, book_id from t1_tmp;
-- drop the temporary table
drop table t1_tmp;

这个索引应该会有所帮助:

INDEX(name, book_id, id)

最新更新