4

虽然这个问题在过去已经提出,但我很好奇这是否仍然是清理大型(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

有没有机会我可以加快速度,或者这是否尽可能好?

感谢您的任何帮助/见解!

4

2 回答 2

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

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

于 2012-10-31T22:52:43.530 回答
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;
于 2012-11-01T07:23:17.587 回答