[ Funkman @ 30.11.2007. 09:29 ] @
Bok Tu sastavljam već mjesecima nešto i staalno gubim vrijeme zbog optimizacije. U biti, brijem da je optimizirano do jaja al eto, volio bih čuti ako je netko radio s većim bazama, kako optimizacija šljaka i kako uopće šljaka optmiziran kod. Google sam iscrpio kolko mi se dalo i kolko je trebalo, pa ako radi tko s tim, eto, zanima me jel ovo OK rješenje ili ima boljih. Nisam fakat stručnjak za MySQL, i ono, ako pretpostavim da će mi se određeni queriji koristit baš doslovce tisuće puta u satu ili čak i više, zanima me kolko je ovo ok rješenje. Imamo query: SELECT tablica1. * FROM tablica1, tablica2 WHERE tablica2.neki_id = tablica1.id AND tablica2.neki_id ='1' UNION SELECT tablica1. * FROM tablica1, tablica2 WHERE tablica2.neki_id = tablica1.id AND tablica2.neki_id ='2' UNION SELECT tablica1. * FROM tablica1, tablica2 WHERE tablica2.neki_id = tablica1.id AND tablica2.neki_id ='3' UNION SELECT tablica1. * FROM tablica1, tablica2 WHERE tablica2.neki_id = tablica1.id AND tablica2.neki_id ='4' UNION SELECT tablica1. * FROM tablica1, tablica2 WHERE tablica2.neki_id = tablica1.id AND tablica2.neki_id ='5' UNION SELECT tablica1. * FROM tablica1, tablica2 WHERE tablica2.neki_id = tablica1.id AND tablica2.neki_id ='6' Što mi daje 6 redova iz tablice 1 cijelih (MyISAM engine, oko 15 polja u redu) I PHPom to čupam: $r = mysql_query($sql) or die(mysql_error()); $this->max = mysql_num_rows ($r); $i = 1; while ($i <= $this->max) { $this->tablica1[$i] = mysql_fetch_assoc($r); $i++; } } } Pa ispišem: $test = new Klasa; $test->funkcija_u_klasi(); $a = 1; while ($a <= $test->max) { echo $test->tablica1[$a][neko_polje] . "<br />"; //associative array dobijem krasan $a++; } E sad. UNION kažu je brži od OR ili XOR koji mogu koristit i napisat kraći query. Indexe sam postavio na polje 'id' u svakoj tablici. Ako netko radi s sličnim (makar i na PostgreSQL ili možda oracle ) i imao je priliku raditi s aplikacijama koje drmaju sličan query na bazu, s recimo više tisuća SELECT-ova po satu, dajte mišljenje jel ovo OK ili može bolje. Point mi i je dobiti MAKSIMALNOOOO brze querije i vrlo optimizirane, tako da su na velikoj količini upisa i ispisa gubici vremenski štooo manji. Npr, kaže mi mysql (na hrvackom) ako stavim to u njegov SQL window: "Prikazivanje redaka 0 - 5 (6 ukupno, Upit je trajao 4f sek)" Pa 4f je valjda super Ako je ovo OK, recite. Ako ima bolje rješenje, vrlo rado ću saslušat jer praktički prvi put se backam s tom optimizacijom i između spika "mysql best handles simple queries" i "indexes are good" ne snalazim se baš. :) Bed. Zahvaljujem unaprijed. |