Pogledajte određenu poruku
Staro 13. 08. 2009.   #1
mb_sa
profesionalac
Qualified
 
Datum učlanjenja: 19.05.2007
Poruke: 123
Hvala: 13
3 "Hvala" u 3 poruka
mb_sa is on a distinguished road
Default [MySQL] Optimizacija upita, indexi

Pozdrav.

http://rapidshare.com/files/26687315...v.sql.zip.html

Sa linka iznad mozete skinuti SQL fajl sa bazom i 3 tabele (njihova struktura i testni podaci).

Dakle, 3 tabele u kojima se čuvaju informacje o vijestima, kategorijama i autorima. Princip news sistema.

Napisao sam upit koji ispisuje 5 vijesti iz odredjene kategorija koja ima svoje potkategorije. Vijesti su soritrane po pozijama i vremenu objave ukoliko ne bude dovoljno vijesti kojima su označene pozicije, jer upit treba da vrati uvijek 5 redova.

Upit je ispod.
Kôd:
SELECT v.id, v.naslov, a.ime_prezime, v.mala_slika, v.uvod
FROM vijesti v, kategorije k, administratori a
WHERE k.kategorija_id = v.kategorija
AND v.autor = a.id
AND v.tip =1
AND v.media =0
AND v.pozicija
IN (
'5', '6', '7', '8', '9', '1000'
)
AND k.parent_id
IN ( 4, 5 )
AND v.id NOT
IN ( 22083, 22075, 22077, 22070 )
AND v.datum_objave <= '2009-08-13 10:58:00'
ORDER BY v.pozicija, v.datum_objave DESC
LIMIT 5
// ako je pozicija 1000, to znači da nema pozicije

Na bazu od 20.000 reedova upit se izvrsava u prosjeku nekih 0.3s sto mi je puno jer ovakih upita imam oko 10-tak na naslovnici (razlciite pozicije (v.pozicija) i kategorija (k.parent_id)).

EXPLAIN upita vraca: http://www.imagesforme.com/show.php/636527_explain.jpg

Ja sam stavio odredjne indexe (vidjećete kada ako pogledate sturkturu tabela iz priloga) koje MySQL i korsiti, tako da je kolona Rows u EXPLAIN tabele sasvim OK. Problem je očigledno kod onog što je napisano u EXTRA koloni.

Mislim da bi se ovaj upit trebao brze zvrsavati, no za to mi je potrebna vasa pomoć? Imate li prijedloga kako da podesim indexe?

Nadam se da nisam nista propustio spomenuti.

Hvala unaprijed.

Poslednja izmena od mb_sa : 13. 08. 2009. u 12:23. Razlog: tipfeleri
mb_sa je offline   Odgovorite uz citat