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.