2014-05-08 127 views
0

我想這樣對我使用此查詢有沒有快速的SQL查詢來刪除重複的行

DELETE FROM data 
WHERE data.ID NOT IN (
        SELECT * FROM ( 
            SELECT MIN(ID) FROM data GROUP BY Link 
            ) AS p 
        ) 

它工作正常,但問題是我的數據庫已經在從我的數據庫中刪除重複的行100萬行,所以當我使用它時,需要4到5小時的時間,它仍然在加載..然後我剛關閉標籤。 所以如果有人有更好的查詢告訴我。由於在Advace

表結構 http://s29.postimg.org/bt57k5enb/image.jpg

+1

表的結構是什麼?什麼決定了一行是否重複? – Cully

+0

這只是你想要做的一次性事情嗎?如果不是的話,爲什麼不首先防止重複數據進入你的數據庫? – Cully

+2

你真的在使用'SQL-Server'和'MySQL'嗎? – DrCopyPaste

回答

2

一種解決方案可能是:


1)建立一個臨時表
2)店鋪單記錄每個鏈接列
3)截斷「數據「表
4)修改」數據「表(添加唯一密鑰約束)
5)將數據表從數據表中重新導入並刪除tmp表

1&2) CREATE TABLE tmp AS SELECT * FROM data GROUP BY Link; 
3) TRUNCATE TABLE data; -- disable foreign key constraints if any 
4) ALTER TABLE data ADD UNIQUE KEY data_link_unique(Link); 
5) INSERT INTO data SELECT * FROM tmp; 
+0

查看附表的結構圖 – user3532237

+0

按照這樣的內容編輯答案 – avisheks

+0

Works fine thanks – user3532237