Autor | Zpráva | ||
---|---|---|---|
Fidelio Profil |
#1 · Zasláno: 27. 3. 2013, 16:17:53 · Upravil/a: Moderátor (editace znemožněna) 28. 3. 2013, 08:24:35
Zdravím
mám 2 tabulky pro fotky a pro produkty, chci zjistit pocet fotek k produktům, pokud ale do sql dam i order by xxx tak misto 0,05s dotaz trvá i minutu! SELECT A.*,ifnull(F.pocet,0) AS pocetF FROM produkt A LEFT JOIN (SELECT COUNT(pomid) AS pocet,pomid FROM files WHERE typ = 1 AND cesta = 'produkty' GROUP BY pomid) F ON A.id = F.pomid order by A.nazev LIMIT 5 Moderátor Kajman: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
struktura tabulky produktů: http://awesomescreenshot.com/01613k1p07 struktura tabulky obrázků: http://awesomescreenshot.com/0c513k248a záměr tabulky obrázků je tabulky pro uchovávání všech příloh obrázků i dokumentů, produktů, aktualit, ... prostě jedna tabulka na vše... produktů: 16000 obrázků: 40000 Napadá někoho jak nastavit indexy/klíče? Nebo by pomohl smíšený index, nebo tak něco? Uvítám každou radu. Nebo existuje nějaký nástroj, který by toto zanalizoval? Díky. |
||
pcmanik Profil |
Fidelio:
SELECT p.*, COUNT(f.pomid) AS pocet_fotiek FROM produkt p LEFT JOIN files f ON f.pomid = p.id AND typ = 1 AND cesta = 'produkty' GROUP BY p.id ORDER BY a.nazov LIMIT 5 A index na stlpec pomid. Sám si môžes overiť použitie indexov pomocou explain-u |
||
Kajman Profil |
Pokud je tam ten limit 5 a neřadí se podle počtu fotek, tak by mělo být nejsvižnější
SELECT A.*, (SELECT Count(pomid) AS pocet FROM files F WHERE F.typ = 1 AND F.cesta = 'produkty' AND A.id = F.pomid) FROM produkt A ORDER BY A.nazev LIMIT 5 Nebo by pomohl smíšený index Pro dotaz v [#1] by byl opravdu vhodný vícesloupcový index, buď (typ,cesta,pomid) nebo (cesta,typ,pomid). Závisí na četnosti výskytů a na dalších dotaze, který z nich bude výhodnější. |
||
Časová prodleva: 11 let
|
0