首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

一个delete语句暴慢无比,怎么优化

2012-10-15 
一个delete语句暴慢无比,如何优化?delete from tbl_survey where n_id not in (select max(n_id) from tbl

一个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

热点排行