我有很大的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。最重要的是沒有重複的物品會消失。
我有很大的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。最重要的是沒有重複的物品會消失。
你可以試試這個:
ALTER IGNORE TABLE my_tablename ADD UNIQUE INDEX idx_name (text1 , text2);
即嘗試添加UNIQUE INDEX
到您的列和alter
表
這有優勢,今後也不會再有重複的行哪你可以插入你的表
我從來沒有嘗試過這一點 - 出於興趣,IGNORE條款是否意味着dup行默默無視? +1 – halfer
@halfer: - 肯定的! –
運行這個:
SELECT COUNT(*), text1, text2
GROUP BY text1, text2
HAVING COUNT(*) > 1;
當您在此處查找行時,請爲每個匹配刪除一行,然後再次運行。
我不確定在性能方面它會是什麼樣子 - 如果您離線執行此操作,也許沒關係?
分組效率不高。這將需要很長時間。 –
在這種情況下,你確定很重要嗎?在很多情況下「它需要很快」,並不需要。你可以離線查詢嗎? – halfer
DELETE FROM t WHERE id NOT IN
(SELECT MIN(id) FROM t GROUP BY text1, text2)
「不關心」有時表示更大的問題!你*應該*關心! – Strawberry
編號並不意味着我的項目中有任何東西。它可以是任何數字。我唯一想要的是刪除所有重複的項目 –
可能的重複http://stackoverflow.com/questions/4685173/delete-all-duplicate-rows-except-for-one-in-mysql –