Pessoal, tava analisando um problema num cliente, e percebi que o 
processo mais demorado era um insert executado várias vezes numa 
tabela. A lógica era mais ou menos essa abaixo, se já existia um 
dado na tabela, era feito um update de valores.

insert into tabela values ...
exception when dup_val_on_index
update tabela set ...

No trace gerado pelo cliente, ele tentou executar 56000 inserts, 
foram gravados somente 56 linhas, o resto foi tudo pro update. O 
problema que pra executar os 56000 inserts demorou 300 segundos, os 
updates foram bem rápidos.

Fazendo os testes, o problema era a primary key, eu desabilitei ela, 
criei um indice normal, e fiz a verificacao se o registro existe, 
faco update, senão, insert. Desse modo ficou bem rápido também.

O que eu gostaria de saber é a explicação pra isso, sei que, com a 
primary key, é necessário atualizar o arquivo de indice a cada 
insert. Mas no cliente só gravou 56 inserts, então conclui que o 
problema em alguma verificação que a primary key força o oracle a 
fazer. Alguém sabe o que o Oracle realiza nos inserts, e o porque da 
demora? Outra coisa, tem como fazer o insert ficar mais rápido ou 
uma solução melhor do que desabilitiar a pk? Se alguém tiver idéia 
melhor ajuda, porque vou ter que alterar um monte de procedures. :-)

Obrigado

Responder a