2012-10-06 41 views
3

我想從mysql數據庫中刪除重複的記錄。使用下面的命令,它將刪除所有重複項並保留一行。在我的數據庫中有300,000條記錄,我預計有大約100,000條記錄是重複的。刪除重複記錄需要太多時間

重複項需要通過下面的命令刪除,但問題是,我已經在晚上9小時後,它仍然在運行的命令。

DELETE n1 FROM tableA n1,tableA n2 WHERE n1.title= n2.title AND n1.id > n2.id 

發生了什麼事?誰能解釋一下?

+0

你對'title'爲每個表定義的索引? – Interrobang

+0

@Interrobang標題只在一個表中A列標題包含我想刪除重複的文章的標題 – payal

+0

這個命令似乎沒有問題,沒有理由延遲這個時間。你可能在表格關係或記錄方面有問題。 –

回答

2

嘗試:

select * from tableA as n1 join tableA as n2 on n1.title = n2.title AND n1.id > n2.id; 

,並解釋它:n1.title = n2.title不使用索引。

這個查詢會更好:

delete from `t2` where `id` in (
    select cid from (
     select max(id) as cid from t2 group by title having count(*) > 1 
    ) as c 
); 
+0

我正在嘗試你的code.but可以請你解釋你的代碼是如何使用索引和我的代碼是不是使用索引 – payal

+0

使用'group by ...'比'title = title'更好,這兩個是不一樣的索引,除非你通過'title'字段創建一個索引 – Koerr

+0

我試過你的代碼,看起來同樣的事情再次發生它正在執行,但不知道需要多少時間 – payal