Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Optimizacija SELECT upita uz koriscenje WHERE, ORDER BY i LIMIT-a

  • 2 odgovora
  • 2.095 pregleda

Najnovija ↓

Optimizacija SELECT upita uz koriscenje WHERE, ORDER BY i LIMIT-a 09.04.2014. u 02:51 · pre 152 meseca #1
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 :)
Potpis
Pozdrav, NenadS!
Re: Optimizacija SELECT upita uz koriscenje WHERE, ORDER BY i LIMIT-a 09.04.2014. u 15:53 · pre 152 meseca #3
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?



Potpis
Pozdrav, NenadS!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme