最快的“Get Duplicates”SQL腳本



scripting performance (4)

什麼是一個快速SQL的例子,以獲得與成千上萬的記錄數據集重複。 我通常使用像這樣的東西:

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

但是這很慢。


你可以嘗試:

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

這是更直接的方式:

select afield1,count(afield1) from atable 
group by afield1 having count(afield1) > 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(*)你不能檢查重複的次數 ,只能看到它不止一次。


上周有人問到類似的問題。 那裡有一些很好的答案。

SQL查找重複條目(在一個組內)

在這個問題中,OP對錶(文件)中的所有列(字段)感興趣,但是如果行具有相同的鍵值(afield1),則屬於同一組。

有三種答案:

where子句中的子查詢,就像這裡的其他答案一樣。

表和組之間的內部連接(我的答案)

和分析查詢(對我來說是新的東西)。





performance