【问题标题】:remove Duplicated data from very huge table从非常大的表中删除重复的数据
【发布时间】:2020-11-19 03:15:29
【问题描述】:

我在 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;

有没有更好的解决方案?

【问题讨论】:

  • 表格中有哪些列?
  • 我有 3 个:id 、 name 、 family ,我需要获得唯一的 name 和 family

标签: mysql sql duplicates sql-insert


【解决方案1】:

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

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

我会更进一步,建议仅在填充表后添加唯一约束,因此数据库不需要检查重复项(查询已经保证),这应该会加快insert声明。

【讨论】:

  • 尽管这在技术上可行,但这个请求对我来说似乎“不清楚”......你不能放弃 50.000 "John Doe",因为它们已经存在不同的 id。 firstname / lastname 上的键是自然键,因此不应强制为唯一键。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2018-07-26
  • 2013-07-29
  • 2012-04-06
  • 2022-01-23
  • 1970-01-01
  • 2015-01-01
相关资源
最近更新 更多