我有一个约有10万条记录的表,我想删除一些行,问题是DELETE
语句运行非常缓慢-它在30分钟内未完成。但是select
语句在1秒内返回。SELECT
语句如下:
select * from daily_au_by_service_summary
where summary_ts >= to_date('09-04-2012','dd-mm-yyyy')
order by summary_ts desc;
和DELETE
语句如下:delete from daily_au_by_service_summary
where summary_ts > to_date('09-04-2012','dd-mm-yyyy');
该表的唯一索引位于summary_ts
。可能是什么原因?
编辑:我杀死了锁定表的 session 后,问题已经解决,谢谢大家的帮助。
SESSION_ID ORACLE_USERNAME OS_USER_NAME OBJECT OWNER OBJECT_NAME OBJECT_TYPE LOCKED_MODE
---------- ------------------------------ ------------------------------ ------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ------------------- -----------
213 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
203 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
202 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
190 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
189 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
188 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
187 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY
最佳答案
原因可能有很多:
SELECT
快速)LOB
,很多列)。 如果外键是问题,通常的解决方案是在外列上添加索引:对于每个删除操作,Oracle需要检查这是否违反外键关系。
关于sql - 在Oracle中Delete语句非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10101484/