sql >> Databáze >  >> RDS >> Oracle

Nejrychlejší způsob vložení milionu řádků v Oracle

Váš přístup povede k problémům s pamětí. Nejrychlejší způsob bude tento [Dotaz upraven po Davidově komentáři, aby se postaral o nulový scénář] :

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 

Výběr vložení je nejrychlejší přístup, protože vše zůstává v paměti RAM. Tento dotaz se může zpomalit, pokud vklouzne do oblasti Global temp, ale pak to vyžaduje ladění DB. Nemyslím si, že může být něco rychlejšího než toto.

Několik dalších podrobností o využití paměti dotazem:

Každý dotaz bude mít svůj vlastní PGA [Program global area], což je v podstatě RAM dostupná pro každý dotaz. Pokud tato oblast nestačí k vrácení výsledků dotazu, pak SQL engine začne používat dočasný tabulkový prostor Golabl, který je jako pevný disk a dotaz začne být pomalý. Pokud jsou data potřebná pro dotaz tak velká, že ani dočasná oblast není dostatečná, dojde k chybě tabulkového prostoru.

Takže vždy navrhněte dotaz tak, aby zůstal v PGA, jinak je to červená vlajka.



  1. SQL vyžadující vlastní připojení a hodnocení

  2. PostgreSQL:vyplňte hodnoty NULL v dotazu timeserie předchozí hodnotou

  3. Jak vložit záznamy do SQL s vyhledanými hodnotami?

  4. Python psycopg2 cursor.fetchall() vrací prázdný seznam, ale cursor.rowcount je> 1