Loading [MathJax]/extensions/tex2jax.js
Ask Your Question
2

SQL INSERT performance

asked Jun 4 '15

PeterBocan gravatar image

updated Jun 4 '15

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

add a comment

3 Answers

Sort by » oldest newest most voted
2

answered Jun 4 '15

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

link

Comments

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

PeterBocan (Jun 5 '15)
add a comment
0

answered Jun 7 '15

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

link
add a comment
0

answered Jun 6 '15

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.

link
add a comment

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: Jun 4 '15

Seen: 295 times

Last updated: Jun 07 '15