从非常大的表中删除重复的数据

pxiryf3j  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(401)

我有一个表在mysql数据库中包含超过5亿条记录,我需要从中删除重复的记录,我尝试了这个表包含2000万条记录的查询,这是可以的,但是对于5亿条记录,这需要很长时间:

-- Create temporary table   
CREATE TABLE temp_table LIKE names_tbles;

-- Add constraint    
ALTER TABLE temp_table ADD UNIQUE(name , family);

-- Copy data     
INSERT IGNORE INTO temp_table SELECT * FROM names_tbles;

有更好的解决办法吗?

2ledvvac

2ledvvac1#

一种选择是聚合,而不是 insert ignore . 这样,数据库就不需要管理被拒绝的记录:

insert into temp_table(id, name, family)
select min(id), name, family 
from names_tbles
group by id, family;

我将更进一步,建议仅在填充表之后添加惟一约束,这样数据库就不需要检查重复项(查询已经保证了这一点),这将加快 insert 声明。

相关问题