MYSQL更有效地删除重复项?

时间:2012-10-31 22:38:02

标签: 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 = n2.col3

我有机会加快速度,或者这样做会不会很好?

感谢您的帮助/见解!

2 个答案:

答案 0 :(得分:2)

在列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);

使用正确的唯一索引,您不必担心以后会出现重复记录。

答案 1 :(得分:1)

同意其他海报 - 您可以为约束重复添加UNIQUE KEY。

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

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;