2012-10-06 44 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