从大表中删除重复项

Tat*_*nen 12 mysql unique duplicates

我有一个很大的表,有19 000 000条记录,我有重复行的问题.即使在这里也有很多类似的问题,但是它们似乎都没有给我一个满意的答案.有些要考虑的要点:

  • 行唯一性由两列确定,location_id并且datetime.
  • 我想尽可能快地保持执行时间(<1小时).
  • 复制表不太可行,因为表的大小是几千兆字节.
  • 无需担心关系.

如上所述,每个location_id只能有一个不同的datetime,我想删除所有重复的实例.由于数据相同,它们中的哪一个存活无关紧要.

有任何想法吗?

小智 16

我认为您可以使用此查询从表中删除重复记录

ALTER IGNORE TABLE table_name ADD UNIQUE (location_id, datetime)
Run Code Online (Sandbox Code Playgroud)

在此之前,先用一些样本数据进行测试......然后试试这个....

注意:在5.5版本上,它适用于MyISAM,但不适用于InnoDB.

  • 这很有效,谢谢.花了31分钟通过16 982 040行,重复1 589 908行.我无法相信这可能是这么简单,没有额外的表或复杂的查询.:) (7认同)