sql >> Databasteknik >  >> RDS >> Oracle

Snabbaste sättet att infoga en miljon rader i Oracle

Ditt tillvägagångssätt kommer att leda till minnesproblem. Det snabbaste sättet kommer att vara detta [Frågan redigerad efter Davids kommentar för att ta hand om ett nollscenario] :

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 

En select insert är det snabbaste tillvägagångssättet eftersom allt förblir i RAM-minnet. Den här frågan kan bli långsam om den glider in i det globala tempområdet men då behöver det DB-justering. Jag tror inte att det kan finnas något snabbare än så här.

Lite mer information om minnesanvändning av Query:

Varje fråga kommer att ha sin egen PGA [Program global area] som i princip är RAM tillgängligt för varje fråga. Om detta område inte är tillräckligt för att returnera frågeresultat börjar SQL-motorn använda Golabl temp tablespace som är som hårddisk och frågan börjar bli långsam. Om data som behövs för en fråga är så enorm att ens temparea inte är tillräcklig kommer du att få ett tabellutrymmesfel.

Så utforma alltid frågan så att den stannar i PGA annars är det en röd flagga.



  1. MySQL:Trunkate Table vs Delete From Table

  2. Lagring av krypterad data i Postgres

  3. Muteringstabell på Oracle SQL-utlösare

  4. SQL:kan inte släppa främmande nyckel på grund av automatiskt genererad begränsning