2014-04-02 58 views
1

我有很大的MySQL數據庫。我需要快速刪除重複項目。下面是它的外觀:如何使用2000萬行數據集刪除MySQL中的重複項?

id | text1 | text2|  
1 | 23 | 43 | 
2 | 23 | 44 | 
3 | 23 | 44 | 

的刪除後,仍表的一部分應該是:

id | text1 | text2| 
1 | 23 | 43 | 
3 | 23 | 44 | 

我不關心的ID。最重要的是沒有重複的物品會消失。

+5

「不關心」有時表示更大的問題!你*應該*關心! – Strawberry

+0

編號並不意味着我的項目中有任何東西。它可以是任何數字。我唯一想要的是刪除所有重複的項目 –

+0

可能的重複http://stackoverflow.com/questions/4685173/delete-all-duplicate-rows-except-for-one-in-mysql –

回答

4

你可以試試這個:

ALTER IGNORE TABLE my_tablename ADD UNIQUE INDEX idx_name (text1 , text2); 

即嘗試添加UNIQUE INDEX到您的列和alter

這有優勢,今後也不會再有重複的行哪你可以插入你的表

+0

我從來沒有嘗試過這一點 - 出於興趣,IGNORE條款是否意味着dup行默默無視? +1 – halfer

+0

@halfer: - 肯定的! –

0

運行這個:

SELECT COUNT(*), text1, text2 
GROUP BY text1, text2 
HAVING COUNT(*) > 1; 

當您在此處查找行時,請爲每個匹配刪除一行,然後再次運行。

我不確定在性能方面它會是什麼樣子 - 如果您離線執行此操作,也許沒關係?

+2

分組效率不高。這將需要很長時間。 –

+0

在這種情況下,你確定很重要嗎?在很多情況下「它需要很快」,並不需要。你可以離線查詢嗎? – halfer

1
DELETE FROM t WHERE id NOT IN 
(SELECT MIN(id) FROM t GROUP BY text1, text2)