sql >> Base de Datos >  >> RDS >> Oracle

La forma más rápida de insertar un millón de filas en Oracle

Su enfoque conducirá a problemas de memoria. La forma más rápida será esta [Consulta editada después del comentario de David para encargarse del escenario 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 

Una inserción seleccionada es el enfoque más rápido, ya que todo permanece en la RAM. Esta consulta puede volverse lenta si se desliza en el área temporal global, pero luego necesita un ajuste de la base de datos. No creo que pueda haber nada más rápido que esto.

Algunos detalles más sobre el uso de la memoria por Query:

Cada consulta tendrá su propia PGA [área global del programa] que es básicamente RAM disponible para cada consulta. Si esta área no es suficiente para devolver los resultados de la consulta, entonces el motor SQL comienza a usar el espacio de tabla temporal de Golabl, que es como un disco duro, y la consulta comienza a volverse lenta. Si los datos necesarios para la consulta son tan grandes que incluso el área temporal no es suficiente, se producirá un error de espacio de tablas.

Así que siempre diseñe la consulta para que permanezca en PGA; de lo contrario, es una bandera roja.