[ Mikes @ 05.04.2005. 11:49 ] @
Zelim da u tabeli1 popunim polje2 sa podacima iz polja2 u tabeli2.
Koristim sledeci php skript:

$link = mysql_connect("localhost", "user", "lozinka")
or die("Could not connect");
mysql_select_db("baza") or die("Could not select database");

mysql_query("UPDATE tabela1 INNER JOIN tabela2 ON tabela1.polje1 = tabela2.polje1 SET tabela1.polje2=tabela2.polje2;") or die("Greska: ".mysql_error());


Medjutim, ovo UZASNO sporo radi, dugo radi i onda zaglavi tako da nikada nisam docekao kraj jer ga moram prekinuti.

Tabela1 ima oko 18.000 a tabela2 ima oko 6.000 zapisa, ako je to uopste bitno.

Pokusao sam sa dodavanjeme indexa na polja; pokusao sam sa zakljucavanjem baze - nije pomoglo.

Imate li iskustva sa ovim? Je li negdje greska i moze li se ista uciniti?
[ Gojko Vujovic @ 05.04.2005. 13:23 ] @
To verovatno nije nešto što mysql zna da optimizuje. Možda i može nešto da se uradi, ali dok se ne javi neko ko zna kako, evo mog predloga: indeksiraj obe kolone, uradi select i izvuci sve vrednosti iz tih kolona iz obe tabele (u tome je mysql super brz), i onda na nivou aplikacije vidi šta treba apdejtovati, pa konstruiši više update query-ja da to odrade.

Mada je stvarno sitna tabela, čudno je da oko toga pravi problem. :/
[ _owl_ @ 05.04.2005. 22:13 ] @
Koja je verzija MySQL-a u pitanju?? Sumnjam da MySQL ne moze da optimizuje INNER JOIN pa i kada se nalazi u UPDATE naredbi. Da li su podignuti indexi na polje1 u obe tabele??
[ Dejan Topalovic @ 05.04.2005. 22:36 ] @
Iz manuala:
Citat:
"Update statements are optimized as a SELECT query with the additional overhead of a write. The speed of the write depends on the amount of data being updated and the number of indexes that are updated. Indexes that are not changed does not get updated.

Also, another way to get fast updates is to delay updates and then do many updates in a row later. Doing many updates in a row is much quicker than doing one at a time if you lock the table.

Note that for a MyISAM table that uses dynamic record format, updating a record to a longer total length may split the record. If you do this often, it is very important to use OPTIMIZE TABLE occasionally. "


Jesi li pokusao odraditi EXPLAIN tog SELECT upita izvan UPDATE-a, mislim solo SELECT upit?
[ Mikes @ 06.04.2005. 07:16 ] @
RIJESIO SAM.

Hvala, pomogli ste mi.

Samo sam postavio indexe na polje1 u obje tabele i sada radi izuzetno brzo.

Moja je greska bila sto sam umjesto da indexiram polje1 indexirao polje2 u obje tabele (glupan) i nije bilo nikakvog efekta.