Autor Zpráva
Jen
Profil *
Mám problém při následujícím sql dotazu:

select COUNT(*) as pcount FROM products AS p
LEFT JOIN prices ON p.pnumber = prices.pnumber
LEFT JOIN vendors ON p.pvendor = vendors.vid,groups
WHERE p.pgroup = groups.skupinaID AND vendors.vid = 310 AND prices.priceMVAT >= 0 AND prices.priceMVAT <= 100

provedení dotazu trvá okolo dvou vteřin. Čím to může být způsobené? Indexy používám. Prosím o pomoc, děkuji.
peta
Profil
Spatne naklicovani - indexy?
"Indexy používám."
Kdo vi jak, ale jeste mne napada rozsah tabulky - radku nebo sloupcu nebo klicu.

Jinak podle dotazu by museli byt klice:
p.pnumber = prices.pnumber
p.pvendor = vendors.vid,groups
p.pgroup = groups.skupinaID
vendors.vid = 310
prices.priceMVAT >= 0
prices.priceMVAT <= 100

cili
tabulka prices: priceMVAT
tabulka vendors: vid
tabulka products: pgroup, pvendor, pnumber
tabulka groups: skupinaID

Asi to neni uplne dobre, ja moc grupovani nepouzivam, ale princip je myslim zrejmy. Mit zaklicovane vse, co se casto pouziva, hlavne u rozsahlych udaju.
Dobre je zaklicovat prvni jednoduche male udaje, pak tabulka s klici nezabira tolik mista.
Take je dobre davat prvni WHERE na jednodussi klice nebo ty, ktere odrezou vetsi skupinu udaju, pokud to jde.

Kdyz budes mit dotaz takovy, ze spojujes 3 rozsahle tabulky a hned u prvni mas spatne klice, tak nez ji vyhleda, si pockas. Pak to musi jeste porovnat s dalsi, kde take nemas spravne klice, takze porovnava more udaju s morem dalsich udaju pres celou delku tabulky... To mas pak tezky :)
peta
Profil
podobny dotaz:
Diskuse » Databáze na webu » Jak v SQL dotazu využít indexy?
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=3 9728
Toto téma je uzamčeno. Odpověď nelze zaslat.

0