Portál AbcLinuxu, 15. května 2025 06:25

Dotaz: mysql efektivny insert/update 50 000 riadkov

3.5.2012 14:43 adrinko | skóre: 22
mysql efektivny insert/update 50 000 riadkov
Přečteno: 541×
Odpovědět | Admin
Ahojte, na insert pouzivam nieco taketo, co mi vlozi cca 50000 zaznamov za krasnych 6 sekund:
$sql = array();  
foreach ($reports as $node) 
{     
  $i = $node->getAttribute('i');
  $t = $node->getAttribute('t'); 
  $sql[] = '("'.$i.'",'.$t.'")'; 
} 
dibi::query('INSERT INTO [tabulka] (i, t) VALUES '.implode(',', $sql));
Potreboval by som ale skript modifikovat tak, aby mi 50000 udajov najprv porovnal, ci sa uz nenachadza podla i v databaze, ak sa nachadza, tak by ho mal updatovat a ak sa nenachadza, tak by ho mal insertovat. Poradite prosim efektivny skript na toto? (mal by to zvladnut za par sekund) Vdaka vopred.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.5.2012 15:14 NN
Rozbalit Rozbalit vše Re: mysql efektivny insert/update 50 000 riadkov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pouzit UPDATE s podminkou, misto INSERT ?

NN
Tarmaq avatar 3.5.2012 15:24 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: mysql efektivny insert/update 50 000 riadkov
Odpovědět | | Sbalit | Link | Blokovat | Admin
udelej si neco jako:
INSERT INTO tabulka (i, t)
SELECT hodnota1a, hodnota1b UNION
SELECT hodnota2a, hodnota2b
EXCEPT
SELECT i, t
FROM tabulka
;
nejak tusim ze to asi MySQL neumi, tak snad te to aspon nakopne a zacnes googlit relevantni data
Don't panic!
rADOn avatar 3.5.2012 16:05 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: mysql efektivny insert/update 50 000 riadkov
Odpovědět | | Sbalit | Link | Blokovat | Admin
INSERT ... ON DUPLICATE KEY UPDATE

REPLACE
"2^24 comments ought to be enough for anyone" -- CmdrTaco
6.5.2012 10:52 Jirka
Rozbalit Rozbalit vše Re: mysql efektivny insert/update 50 000 riadkov
Na ten REPLACE pozor. Interné se provádí tak, že případný duplicitní záznam nejprve smaže a následně vytvoří nový.

Pokud používáte integritní omezení na cizí klíče s nastavením ON DELETE CASCADE nebo ON DELETE SET NULL můžete si nevědomky smazat nebo vynulovat záznamy v jiných tabulkách.
4.5.2012 11:59 Ivan
Rozbalit Rozbalit vše Re: mysql efektivny insert/update 50 000 riadkov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tvuj problem se jmenuje UPSERT (update a insert dohromady). Ve standartnim SQL se to resi pomoci prikazu MERGE.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.