虽然这个问题在过去已经提出,但我很好奇这是否仍然是清理大型(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
我有机会加快速度,或者这样做会不会很好?
感谢您的帮助/见解!
答案 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;