sql >> Database >  >> RDS >> Oracle

Snelste manier om een ​​miljoen rijen in Oracle in te voegen

Uw aanpak zal leiden tot geheugenproblemen. De snelste manier is deze [Query bewerkt na de opmerking van David om voor een nulscenario te zorgen] :

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 

Een select insert is de snelste benadering omdat alles in het RAM blijft. Deze query kan traag worden als deze in het Globale tijdelijke gebied terechtkomt, maar dan moet de database worden afgesteld. Ik denk niet dat er iets sneller kan zijn dan dit.

Nog enkele details over geheugengebruik door Query:

Elke query heeft zijn eigen PGA [Program global area], wat in feite RAM is die beschikbaar is voor elke query. Als dit gebied niet voldoende is om queryresultaten te retourneren, begint de SQL-engine de Golabl-temp-tabelruimte te gebruiken die vergelijkbaar is met de harde schijf en begint de query langzaam te worden. Als de gegevens die nodig zijn voor een zoekopdracht zo groot zijn dat zelfs het tijdelijke gebied niet voldoende is, dan krijg je een tablespace-fout.

Ontwerp de query dus altijd zodat deze in PGA blijft, anders is het een rode vlag.



  1. SQL Server 2005 draaien op onbekend aantal kolommen

  2. Maak een "in plaats van" trigger in SQL Server

  3. Resultaten van unie combineren in één rij wanneer sommige kolommen verschillende waarden hebben

  4. Indexscan voor vergelijking van meerdere kolommen - niet-uniforme volgorde van indexkolommen