Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Optimizirani MySQL query-i

[es] :: MySQL :: Optimizirani MySQL query-i

[ Pregleda: 1121 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Funkman
web administrator
KC

Član broj: 142276
Poruke: 13
*.adsl.net.t-com.hr.

Sajt: www.virtualnet.hr


Profil

icon Optimizirani MySQL query-i30.11.2007. u 09:29 - pre 199 meseci
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.
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Optimizirani MySQL query-i30.11.2007. u 17:53 - pre 199 meseci
Stavi 'UNION ALL' umesto 'UNION'.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

[es] :: MySQL :: Optimizirani MySQL query-i

[ Pregleda: 1121 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.