Autor | Zpráva | ||
---|---|---|---|
JardaB Profil |
#1 · Zasláno: 14. 6. 2013, 11:11:33
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 |
#2 · Zasláno: 14. 6. 2013, 11:29:00
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 |
#3 · Zasláno: 14. 6. 2013, 11:39:38
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 |
#4 · Zasláno: 14. 6. 2013, 11:44:32
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 |
#5 · Zasláno: 14. 6. 2013, 11:49:34
Jasně tomu rozumím, u mě jeden řádek nepřesahuje 1500 znaků
|
||
Kajman Profil |
#6 · Zasláno: 14. 6. 2013, 20:35:16
Tak tou délkou vydělte ten limit serveru, zjistíte ho např. díky
select @@max_allowed_packet 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ý. |
||
Časová prodleva: 11 dní
|
|||
JardaB Profil |
#7 · Zasláno: 26. 6. 2013, 08:01:52
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? |
||
Časová prodleva: 12 let
|
0