Autor Zpráva
Meldo
Profil
Ahojte,

neviem si rady s optimalizaciou rychlosti SQL prikazu na vyber a zoradenie produktov z DB.
Mam dve tabulky. Jedna obsahuje zoznam produktov, druha obsahuje zoznam zakupenych produktov. Potrebujem ich zoradit podla kúpenosti. Mám niečo takéto:

SELECT id, nazov FROM produkty WHERE zmazane = 1 ORDER BY (SELECT sum(mnozstvo) as pocet FROM eshop_objednavky_produkty WHERE id_produktu = produkty.id) DESC

Problém je, že tabulka "produkty" má cca 6000 riadkov, tabulka "eshop_objednavky_produkty" má cca 200 000 riadkov a vykonanie hore uvedeného trvá aktuálne 194 sekúnd.
Ako toto optimalizovať na nejakú normálnu rýchlosť?
pcmanik
Profil
Meldo:
Samozrejme predpoklad je mať index na stĺpci id_produktu.

SELECT p.id, p.nazov, SUM(op.mnozstvo) AS pocet_predanych
FROM produkty p
JOIN eshop_objednavky_produkty op ON op.id_produktu = p.id
GROUP BY p.id
ORDER BY pocet_predanych DESC
Kajman
Profil
Ten sum to vždy zpomalí. Pokud to je důležitý a častý dotaz. Tak je možné mit předpočítané součty v pomocné tabulce. Ta může být editovatelná zřeba triggery.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: