从非常大的 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
语句。
我有一个 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
语句。