stovky tisíc insertů v mysql
- pjoter
- Člen | 118
Zdravím potýkám se s problémem. Přes nette a dibi provádím převod databáze z sqlite do mysql, některé tabulky mají až stovky tisíc záznamů a u nich mi to vždy zatuhne. Snažím se rozdělit na několik dotazů ale hodí mi laděnka error
skript vypada takto:
Editoval pjoter (14. 2. 2010 14:15)
- Honza Marek
- Člen | 1664
Provádíš to na hostingu nebo u sebe na počítači? Ten limit se dá zvýšit, ale na hostinzích to bývá zakázané.
- Vyki
- Člen | 388
Jak píše Iguana, mrkni na použití CLI routeru z Nette.
EDIT\\ zde se
o tom píše podrobněji
Editoval Vyki (13. 2. 2010 21:53)
- Panda
- Člen | 569
Pokud používáš INNODB, tak se pro každý INSERT mimo transakci (což je i případ, kdy transakce nepoužíváš) transakce spustí a pak commitne. Vkládání záznamů pak vypadá takto:
START TRANSACTION
INSERT ...
COMMIT
START TRANSACTION
INSERT ...
COMMIT
START TRANSACTION
INSERT ...
COMMIT
Při uzavření všeho do transakce by to vypadalo takto:
START TRANSACTION
INSERT ...
INSERT ...
INSERT ...
COMMIT
Nárůst výkonu se u mnoha insertů pohybuje v řádu tisíců procent.
LOCK by žádný vliv na výkon neměl mít, ale vkládání je pak bezpečnější (máš jistotu, že Ti do vkládaných dat nikdo nebude zasahovat).
- timbulko
- Člen | 85
Panda napsal(a):
LOCK by žádný vliv na výkon neměl mít, ale vkládání je pak bezpečnější (máš jistotu, že Ti do vkládaných dat nikdo nebude zasahovat).
Podľa testu, ktorý robil Jakub Vrána má aj LOCK v MyIsam minimálny efekt (cca. 8%) na rýchlosť pridávania. Viz. http://php.vrana.cz/…-tabulek.php – v prípade MyIsam by však bol pri veľkom množstve insertov najvýhodnejší tretí spôsob (ten je asi 20× rýchlejší)