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 |
#3 · Zasláno: 12. 6. 2018, 20:47:21
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.
|
||
Časová prodleva: 6 let
|
0