Autor Zpráva
JardaB
Profil
Zdravím,

chci nějak optimalizovat ukládání položek zboží do tabulky, která má již 2 mil záznamů. Prozatím jsem ukládal v cyklu po jedné položce, kdy cyklus provedl uložení i 7 tis položek. Jak vhodně uložit tyto položky, abych nemusel po jedné a nějak snížil dobu a vytížení serveru?
Kajman
Profil
Pokud se jedná o mysql, tak insert dovoluje vložit více řádků najednou. Nesmí jich však být tak moc, že délka výsledného dotazu překročí nastavené max_allowed_packet.
JardaB
Profil
tzn vygenerovat insert a pak jednorázově vložit? Nerad bych to přehnal, tedy když mám 10 tis položek, po kolika vkládat? Abych zase negeneroval příliš dlouhé řetězce.
ts_istudio
Profil
JardaB:
Jeden řádek může mít sto znaků nebo taky deset tisíc. Kromě toho můžeš mít různě nastavený server. Zrovna včera kolega vkládal do nějaké databáze kolem 2 miliónů řádků a trvalo to hodinu a půl. Jinde může být limit 30 sekund.
JardaB
Profil
Jasně tomu rozumím, u mě jeden řádek nepřesahuje 1500 znaků
Kajman
Profil
Tak tou délkou vydělte ten limit serveru, zjistíte ho např. díky
select @@max_allowed_packet
a máte přibližný počet řádků, které můžete vložit najednou.

Případně můžete kontrolovat skutečnou délku dotazu - když již by se tam další řádek nevešel, spustíte ho a začnete chystat nový.
JardaB
Profil
Kajman:
Díky za radu, můžu otestovat... zkoušel jsem dávkovat insert ručně a zjistit, že když přesunu v cyklu dávky 10 řádků nebo 300 řádků, tak ve výsledku se celková doba vykonání všech nutných dávek liší opravdu neznatelně. Otázkou je co více nebo méně zatíží server?

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: