Slow Update after Truncate
oracle, sql, truncate
Solution
Thanks for the input, they helped me figure out what caused the problem: Chained Rows!
- after the insert of the new rows AnzDarl (and a number of other columns) are null
- when the columns are set to 1 (or other values), they occupy some more space
I was able to check this using the following SQL:
select chain_cnt
from user_tables
where table_name='SV_KONGINFO';
After the Truncate, the chain_cnt was 0. After running the Update, the chain_cnt increased dramatically and was equal to the number of affected rows.
Increasing PCT_FREE like this solved the performance issue for me:
alter table sv_konginfo pctfree 40;
Thanks again for the input, they helped to rule out some potential issues until finally chained rows rose to the top of my mind.
Problem
I've got a relatively simple update statement: ``` update sv_konginfo ki set AnzDarl = 1 where kong_nr in ( select kong_nr from sv_darlehen group by kong_nr having count (*) = 1); ``` which runs okay on its own (about 1 second for about 150.000 records). However, if I truncate the table and then re-insert the records: ``` truncate table sv_konginfo; insert into sv_konginfo (kong_nr) select distinct kong_nr from sv_darlehen; ``` the update statement runs very slow (more than a minute) working on exactly the same data. What can I do to improve the performance in the second scenario? (We're using an Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit.)