MYSQL是否可以更高效地删除重复项?

MYSQL是否可以更高效地删除重复项?,mysql,Mysql,虽然这个问题在过去已经提过了,但我很好奇这是否仍然是清理大型3M和不断增长的表中重复条目的最佳方法。每次大容量插入后,我都运行这一行以保持整洁,但执行起来需要很长时间 重复行只能通过3列确定。其他的要么自动递增,要么具有唯一的ID、源等 这是我目前正在做的事情- DELETE n1 FROM main n1, main n2 WHERE n1.id < n2.id AND n1.col1 = n2.col1 AND n1.col2 = n2.col2 AND n1.col3 =

虽然这个问题在过去已经提过了,但我很好奇这是否仍然是清理大型3M和不断增长的表中重复条目的最佳方法。每次大容量插入后,我都运行这一行以保持整洁,但执行起来需要很长时间

重复行只能通过3列确定。其他的要么自动递增,要么具有唯一的ID、源等

这是我目前正在做的事情-

DELETE n1 
FROM main n1, main n2 
WHERE n1.id < n2.id 
AND n1.col1 = n2.col1 
AND n1.col2 = n2.col2 
AND n1.col3 = n2.col3
我有没有可能加快速度,或者这是最好的


感谢您的帮助/见解

向表中col1、col2和col2列添加一个唯一索引,如下所示

ALTER TABLE `main` ADD UNIQUE INDEX `col1_col2_col3` (`col1`, `col2`, `col3`);
这将防止向表中插入重复的行

例如: 插入此值后

INSERT INTO `main` (`col1`, `col2`, `col3`) VALUES (1, 11, 111);
您无法插入此项,将出现重复行错误

INSERT INTO `main` (`col1`, `col2`, `col3`) VALUES (1, 11, 111);

有了正确的唯一索引,您以后就不必担心重复记录。

同意其他海报-您可以为约束副本添加唯一键

如果要删除重复项,可以使用此查询-

DELETE t1 FROM main t1
  JOIN (SELECT MIN(id) id, col1, col2, col3 FROM main
        GROUP BY col1, col2, col3) t2
  ON
    t1.id <> t2.id AND
    t1.col1 = t2.col1 AND t1.col2 = t2.col2 AND t1.col3 = t2.col3;

你不能添加一个唯一的索引来防止更多的重复行吗?你的确切意思是什么?嗯。。。我在这里看到的唯一问题是,我需要新的重复条目来替换以前的记录。其中n1.id