[ NenadS @ 09.04.2014. 01:51 ] @
Imam tri tabele u bazi i to:

Code:

- kategorije
--id
--ime

- slike
-- id
-- ime
-- url
itd.

- slika_kategorije
-- id
-- id_slike
-- id_kategorije


Problem nastaje kada pokusam da selektujem slike odredjene kategorije pri cemu je LIMIT 300000,10 i uz to ide ORDER BY id DESC i WHERE id = X.

Ono sto se preporucuje kao resenje jeste da limitiram broj strana na 50-100 jer bih tako izbegao ove upite koji su spori ali me zanima da li ipak postoji neko resenje da se ovaj problem bar delimicno resi?

Tabela kategorije ima oko 200 redova, slike oko 1M, i slika_kategorija 3M jer svaka slika moze da ima vise kategorija i koristim InnoDB ali ne znam da li da particionisem ove dve velike tabele i po kom modelu bi to bilo dobro uraditi?

Svaka pomoc je dobrodosla :)
[ cyBerManIA @ 09.04.2014. 04:10 ] @
Koliko traji upit? Sta si indeksirao? Daj 'explain'. Kako je podesen server?

U svakom slucaju mozes horizontalno da skaliras slika_kategorije.
[ NenadS @ 09.04.2014. 14:53 ] @
Preko JOIN-a sam uspeo da vreme izvrsanja upita smanjim na prihvatljiv nivo ali cu svakako limitirati broj strana koje se mogu otvoriti i tako cu resiti problem na neki nacin.

Ovo je upit koji mi daje najbolje rezultate:

Code:
EXPLAIN SELECT md.id, md.sef_url, md.title
FROM (

SELECT mc.movie_id
FROM  `movies` AS m,  `movie_categories` AS mc
WHERE m.`site_id` =1
AND m.`movie_id` = mc.`movie_id` 
AND mc.`cat_id` =1
ORDER BY m.`movie_id` DESC 
LIMIT 0 , 30
) AS t
JOIN  `movies_data` AS md ON md.`id` = t.`movie_id`


Code:
Showing rows 0 - 29 ( 30 total, Query took 0.0028 sec)


Dok za LIMIT 10000, 30 dobijam

Code:
Showing rows 0 - 29 ( 30 total, Query took 0.2843 sec)


Do sada nisam koristio "FOREIGN KEY" pa me zanima da li se isplati koristiti ih ako znam da se oni nece koristiti kod upita vec ce sluziti samo kao zamena za izvrsavanje vise upita kod insert/update/delete-a i sprecavanje da sistem greskom upise ID koji ne postoji, a svakako zauzimaju dosta prostora kao indeksi?