从大表中删除重复项

时间:2010-03-05 10:13:25

标签: mysql unique duplicates

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

  • 行唯一性由两列location_iddatetime决定。
  • 我想尽快保持执行时间(<1小时)。
  • 复制表不太可行,因为表的大小为几千兆字节。
  • 无需担心关系。

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

有什么想法吗?

5 个答案:

答案 0 :(得分:16)

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

ALTER IGNORE TABLE table_name ADD UNIQUE (location_id, datetime)

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

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

答案 1 :(得分:1)

SELECT *, COUNT(*) AS Count
FROM table
GROUP BY location_id, datetime
HAVING Count > 2

答案 2 :(得分:0)

UPDATE table SET datetime  = null 
WHERE location_id IN (
SELECT location_id 
FROM table as tableBis
WHERE tableBis.location_id = table.location_id
AND table.datetime > tableBis.datetime)

SELECT * INTO tableCopyWithNoDuplicate FROM table WHERE datetime is not null

DROp TABLE table 

RENAME tableCopyWithNoDuplicate to table

所以你保持较低的日期时间。我不确定perf,这取决于你的表格列,你的服务器等......

答案 3 :(得分:0)

此查询适用于所有情况:针对引擎测试:MyIsam为200万行。

ALTER IGNORE TABLE table_name ADD UNIQUE(location_id,datetime)

答案 4 :(得分:0)

您可以使用以下步骤删除重复项: 1-将以下查询的结果导出到txt文件中:

select dup_col from table1 group by dup_col having count(dup_col) > 1

2-将其添加到上面第一个txt文件中并运行最终查询:

delete from table1 where dup_col in (.....)

请注意&#39; ...&#39;是第一步中创建的txt文件的内容。