日期:2014-05-17  浏览次数:20900 次

一个delete语句暴慢无比,如何优化?
delete from tbl_survey where n_id not in (select max(n_id) from tbl_survey group by n_human_id)

n_id是主键,n_human_id是人的编码,数字类型,表中有重复,已经建了normal索引。

表中一共60000多条数据,其中n_human_id重复的大概30000条。

这个查询运行了10多分钟都没有出结果,如果我强制加上n_id<10000这样的限制的话,即使只是删除2000条数据,大概也要跑5分钟左右。

实在不知道问题出在哪里?数据库服务器性能没有问题,cpu和内存都在50%以下。





------解决方案--------------------
--一个表只判断一列重复 现在是empno重复--最高效----
DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

------解决方案--------------------
delete * from tbl_survey t1 where where t1.n_id!= 
(select max(n_id) from tbl_survey t2 
where t1.n_human_id=t2.n_human_id) 

不要用group by