我有一个相对简单的更新声明:
update sv_konginfo ki
set AnzDarl = 1
where kong_nr in (
select kong_nr
from sv_darlehen
group by kong_nr
having count (*) = 1);
单独运行(约150秒记录约1秒)。
但是,如果我截断表格然后重新插入记录:
truncate table sv_konginfo;
insert into sv_konginfo (kong_nr)
select distinct kong_nr
from sv_darlehen;
更新语句运行速度非常慢(超过一分钟)处理完全相同的数据。
我可以做些什么来改善第二种情况下的表现? (我们使用的是Oracle数据库10g企业版10.2.0.3.0 - 64位。)
答案 0 :(得分:4)
感谢您的投入,他们帮助我找出导致问题的原因:Chained Rows!
我可以使用以下SQL检查:
select chain_cnt
from user_tables
where table_name='SV_KONGINFO';
在Truncate之后,chain_cnt为0.运行Update后,chain_cnt急剧增加,并且等于受影响的行数。
像这样增加PCT_FREE解决了我的性能问题:
alter table sv_konginfo pctfree 40;
再次感谢您的投入,他们帮助排除了一些潜在的问题,直到最终链接的行成为我的最高层。
答案 1 :(得分:3)