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

remove Duplicated data from very huge table

我有一个 table 在 MySQL 数据库中包含超过 5 亿条记录, 我需要从中删除重复项, 我在 table 上尝试了此查询,其中包含 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;

有更好的解决方案吗?

一个选项是聚合而不是 insert ignore。这样,数据库就不需要管理被拒绝的记录了:

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

我会更进一步,建议仅在填充 table 后才添加唯一约束,因此数据库无需检查重复项(查询已保证),这应该加快 insert 语句。