最快的“Get Duplicates”SQL脚本

什么是一个快速SQL的例子,以获得与成千上万的logging数据集重复。 我通常使用像这样的东西:

SELECT afield1, afield2 FROM afile a WHERE 1 < (SELECT count(afield1) FROM afile b WHERE a.afield1 = b.afield1); 

但是这很慢。

这是更直接的方式:

 select afield1,count(afield1) from atable group by afield1 having count(afield1) > 1 

你可以尝试:

 select afield1, afield2 from afile a where afield1 in ( select afield1 from afile group by afield1 having count(*) > 1 ); 

上周有人问到类似的问题。 那里有一些很好的答案。

SQL查找重复条目(在一个组内)

在这个问题中,OP对表(文件)中的所有列(字段)感兴趣,但是如果行具有相同的键值(afield1),则属于同一组。

有三种答案:

where子句中的子查询,就像这里的其他答案一样。

表和组之间的内部连接(我的答案)

和分析查询(对我来说是新的东西)。

顺便说一句,如果有人想删除重复,我用这个:

 delete from MyTable where MyTableID in ( select max(MyTableID) from MyTable group by Thing1, Thing2, Thing3 having count(*) > 1 ) 

这应该是相当快(如果dupeFields索引更快)。

 SELECT DISTINCT a.id, a.dupeField1, a.dupeField2 FROM TableX a JOIN TableX b ON a.dupeField1 = b.dupeField2 AND a.dupeField2 = b.dupeField2 AND a.id != b.id 

我猜这个查询唯一的缺点是,因为你没有做一个COUNT(*)你不能检查重复的次数 ,只能看到它不止一次。