Ask Your Question
2

SQL INSERT performance

asked 2015-06-04 20:02:04 +0100

PeterBocan gravatar image

updated 2015-06-04 20:04:13 +0100

Pekný večer, mám takéto dilema: mám 180 miliónov riadkov (v CSV), tj. cca 20 GB, ktoré potrebujem natrepať do PostgreSQL, teraz rozmýšľam nad tým, či je výkonový rozdiel medzi

INSERT INTO table VALUES (...);
INSERT INTO table VALUES (...);

a

INSERT INTO table VALUES (...), (...)

Týmto napríklad trpí MS SQL (a to som reálne uvažoval o MS SQL), kde prvá varianta je výrazne rýchlejšia, než druhá. Viď: http://stackoverflow.com/questions/8635818/multiple-insert-statements-vs-single-insert-with-multiple-values

edit retag flag offensive close delete

3 Answers

Sort by » oldest newest most voted
2

answered 2015-06-04 20:32:32 +0100

Josef Kokeš gravatar image

Tyhle věci je obecně potřeba vyzkoušet. Různé databáze se často chovají různě, mnohdy i výrazně různe - klidně i tak protismyslně jako MSSQL. Nejlepší by ovšem bylo využít nějaký příkaz, který by sloužil přímo k načtení toho CSV souboru do tabulky. Např. MSSQL pro to má BULK INSERT, který je o několik řádů rychlejší než oba normální INSERTy, které jste napsal výše.

PostgreSQL na to má příkaz COPY, vizte http://stackoverflow.com/questions/2987433/how-to-import-csv-file-data-into-a-postgres-table

edit flag offensive delete publish link more

Comments

Tak to vyskúšam a dám vedieť. Zatiaľ to tu nechám visieť.

PeterBocan ( 2015-06-05 12:34:55 +0100 )edit
0

answered 2015-06-07 09:02:19 +0100

Petr Klejch gravatar image

V přednáškovém slajdu Pavla Stěhuleho předmětu AWD je docela pěkná tabulka srovnání INSERT a COPY pro PostgreSQL. https://edux.fit.cvut.cz/courses/BI-AWD/_media/lectures/08/skoleni_administrace_web.pdf

edit flag offensive delete publish link more
0

answered 2015-06-06 18:09:15 +0100

WaageVer gravatar image

Pokud by se nutně muselo vkládat jednotlivými inserty, tak "zarámovat do transakce" na třeba každých tisíc vkládaných řádek. A jestli jsou tam indexy, tak je dropnout a po vložení vytvořit znovu.

Ale jak už tu zaznělo, mnohem lepší je použít specializovaný program nebo příkaz pro import, v postgresu COPY.

edit flag offensive delete publish link more

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2015-06-04 20:02:04 +0100

Seen: 295 times

Last updated: Jun 07 '15