Zadejte hledaný výraz...

Vlozit pokud neexistuje, aktualizace pokud existuje

tomix
verified
rating uzivatele
(5 hodnocení)
6. 5. 2011 09:45:03
Ahoj,
delam si emailovou databazi a narazil jsem na podstatny problem - rychlost. Vsechny emaily vlozim (po radcich pres textarea) do pole $emaily. Splodil jsem tento kod ktery funguje dobre, ale potreboval bych ho upravit aby frcel podstatne rychleji - pokud zaznam existuje, aktualizovat pozadovany sloupec s emailem, pokud neexistuje, vlozit novy radek. Skript bezi na localhostu, ale i tak zpracuje jen cca 400 emailu/min a postupne pozvolna zpomaluje
...
foreach($emaily as $em) {
KontrolaEmailu($em);
$result = mysql_query("update `edb` set `$ktg`='1' where email='$em';");
if (mysql_affected_rows()==0) {
$result = mysql_query("insert into edb (email,$ktg) values ('$em','1');");
$vok[]=$em;
if($debug==0) echo "Vlozen $em
";
}
else {
$aok[]=$em;
if($debug==0) echo "Aktualizovan $em
";
}
}
...
Diky za vsechny rady
6. 5. 2011 09:45:03
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634404
martinzsa
verified
rating uzivatele
(1 hodnocení)
6. 5. 2011 10:57:57
co tak skusit pouzit transakcie ? spustis transakciu pred tym tvojim cyklom, vykonas cyklus a commitnes DB. ukladanie by sa malo potom vykonat ako jeden prikaz cize by malo byt rychle...
priklad (sice nie v php ale vb.net): ukadal som radovo tisice zaznamov do sqlite db a cely cyklus ulozenia trval daco cez minutu, po pridani transakcii to padlo na dakych 12-15sekund.
6. 5. 2011 10:57:57
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634403
tomix
verified
rating uzivatele
(5 hodnocení)
6. 5. 2011 21:28:07
Eh vubec netusim o cem mluvis, natoz jak to provest... "programuju" jen tak svatecne
6. 5. 2011 21:28:07
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634402
takatom
verified
rating uzivatele
(2 hodnocení)
6. 5. 2011 22:31:25
tabulka edb by měla mít email jako primární klíč. Pokud nemá, po vytvoření se script zrychlí.
lepší pak bude příkaz
INSERT INTO edb (email,$ktg) VALUES ('$em',1) ON DUPLICATE KEY UPDATE $ktg=1
6. 5. 2011 22:31:25
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634401
martinzsa
verified
rating uzivatele
(1 hodnocení)
7. 5. 2011 01:21:18
Napsal tomix;653541
Eh vubec netusim o cem mluvis, natoz jak to provest... "programuju" jen tak svatecne
ak sa nemylim tak by to malo byt takto nejako syntaxou som si neni 100% isty kedze s php som nerobil uz par rokov:
7. 5. 2011 01:21:18
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634400
Singularita
verified
rating uzivatele
7. 5. 2011 01:42:30
Přesně k tomu (vložit a když existuje, tak updatnout) slouží v MySQL příkaz replace:
http://dev.mysql.com/doc/refman/5.0/en/replace.html
V podstatě místo "insert into tabulka () values ()" se napíše "replace into tabulka () values ()"
7. 5. 2011 01:42:30
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634399
martinzsa
verified
rating uzivatele
(1 hodnocení)
7. 5. 2011 02:16:01
replace nerobi update riadku ale na duplicitny riadok zavola delete a potom insert cize neupravujes iba konkretne hodnoty ale komplet cely zaznam...
7. 5. 2011 02:16:01
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634398
hm
verified
rating uzivatele
(20 hodnocení)
7. 5. 2011 07:52:48
tak, replace je sice pekna fce, ale vykonava novy insert, coz je v tolika pripadech na skodu, ze se hodi fakt jen k velmi malemu mnozstvi operaci (ve vetsine pripadu je smazani radku destruktivni neskutecne, nebot pri provazanych relacich to muze smazat/znehodnotit spousty dalsich dat)
7. 5. 2011 07:52:48
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634397
Jednoduše plýtváš paměť zbytečným vypisováním echa. Odstraň echa a script poběží rychleji.
7. 5. 2011 08:38:30
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634396
hm
verified
rating uzivatele
(20 hodnocení)
7. 5. 2011 08:48:01
to sice ano, ale podle me ma i spatne indexy protoze 400/min ? pri tomhle kodu? nemozne, pri milionu zaznamu velmi podobny script a jel ve stovkach za sekundu :)
7. 5. 2011 08:48:01
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634395
INSERT INTO edb (email,$ktg) VALUES ('$em',1) ON DUPLICATE KEY UPDATE $ktg=1
Bude asi urcite nejrychlejsi
7. 5. 2011 09:56:29
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634394
tomix
verified
rating uzivatele
(5 hodnocení)
7. 5. 2011 10:01:00
Napsal takatom;653552
tabulka edb by měla mít email jako primární klíč. Pokud nemá, po vytvoření se script zrychlí.
lepší pak bude příkaz
INSERT INTO edb (email,$ktg) VALUES ('$em',1) ON DUPLICATE KEY UPDATE $ktg=1
Pouzil jsem toto reseni a dopadlo to takto:
Puvodne: 400em/60sek ---> Nyni: 11200em/13sek
Diky moc vsem, takatom rep+
7. 5. 2011 10:01:00
https://webtrh.cz/diskuse/vlozit-pokud-neexistuje-aktualizace-pokud-existuje/#reply634393
Pro odpověď se přihlašte.
Přihlásit