MySQL,如何合并表重复条目

sde*_*ont 7 mysql sql myisam

可能重复:
如何删除重复的行?
仅使用MySQL查询删除重复项?

我有一个大约14M条目的大桌子.表类型是MyISAM而不是InnoDB.

不幸的是,我在这个表中有一些重复的条目,我发现有以下请求:

SELECT device_serial, temp, tstamp, COUNT(*) c FROM up_logs GROUP BY device_serial, temp, tstamp HAVING c > 1
Run Code Online (Sandbox Code Playgroud)

为了避免将来出现这些重复,我想使用SQL请求将当前索引转换为唯一约束:

ALTER TABLE  up_logs DROP INDEX UK_UP_LOGS_TSTAMP_DEVICE_SERIAL,
ALTER TABLE up_logs ADD INDEX UK_UP_LOGS_TSTAMP_DEVICE_SERIAL (  `tstamp` ,  `device_serial` )
Run Code Online (Sandbox Code Playgroud)

但在此之前,我需要清理我的副本!

我的问题是:如何只保留一份重复条目?请记住,我的表包含14M条目,所以如果可能的话我想避免循环.

欢迎任何评论!

Mih*_*ncu 4

在您需要的多个列上创建一个新的唯一键作为唯一键将自动清除表中的任何重复项。

ALTER IGNORE TABLE `table_name`
    ADD UNIQUE KEY `key_name`(`column_1`,`column_2`);
Run Code Online (Sandbox Code Playgroud)

IGNORE部分不允许脚本在第一个错误发生后终止默认行为是删除重复项。