Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Maneira mais rápida de inserir um milhão de linhas no Oracle


Sua abordagem levará a problemas de memória. A maneira mais rápida será esta [Consulta editada após o comentário de David para cuidar do cenário nulo]:
insert into dtr_debtors1(SSN)
select a.S1+level
   from dual,(select nvl(max(ssn),0) S1 from dtr_debtors1) a
connect by level <= 10000 

Uma inserção de seleção é a abordagem mais rápida, pois tudo permanece na RAM. Essa consulta pode se tornar lenta se deslizar para a área de temperatura global, mas isso precisa de ajuste de banco de dados. Acho que não pode haver nada mais rápido do que isso.

Mais alguns detalhes sobre o uso de memória por Query:

Cada consulta terá seu próprio PGA [área global do programa] que é basicamente a RAM disponível para cada consulta. Se esta área não for suficiente para retornar os resultados da consulta, o mecanismo SQL será iniciado usando o espaço de tabela temporário Golabl, que é como o disco rígido e a consulta começará a ficar lenta. Se os dados necessários para a consulta forem tão grandes que mesmo a área temporária não seja suficiente, você terá um erro de tablespace.

Portanto, sempre projete a consulta para que ela permaneça no PGA, caso contrário, é uma bandeira vermelha.