我有一个包含19 000 000条记录的大型表格,我遇到重复行的问题。即使在这里也有很多类似的问题,但是它们似乎都没有给我一个满意的答案。需要考虑的一些要点:
location_id
和datetime
决定。如上所述,每个location_id
只能有一个不同的datetime
,我想删除所有重复的实例。由于数据相同,它们中的哪一个存活无关紧要。
有什么想法吗?
答案 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 (.....)
请注意' ...'是第一步中创建的txt文件的内容。