OT: Optimalizace selectu v MySQL
Petr Stetina
petr.stetina@braien.com
Úterý Červen 26 12:48:24 CEST 2007
RV wrote:
> Tak jsem si pohral a asi je to jasne viz priloha dotaz.html
>
> SELECT * FROM meteo WHERE DATE_FORMAT(datum,'%Y-%m-%d') ="2007-06-25"
>
> neni slozite si domyslet proc nepouzije index - protoze hledam podle
> vysledku funkce, ktera neodpovida PK a ani jinemu indexu. To je take
> duvod proc funguje hledani dle klice pokud zadam rozpeti i vcetne casu
> tak, ze to omezim podminkama na jeden den:
>
> SELECT * FROM phprs.meteo WHERE datum>="2007-06-25 00:00:00" AND
> datum<"2007-06-26 00:00:00"
>
> vysledek explain je v priloze dotaz2.html - bohuzel tohle zadavani je mi
> velmi nesikovne a pokud by to slo rad bych to nejak obesel :-(
>
>
> Radek Vicek
Dobry den,
obavam se, ze jde o obecnou vlastnost SQL. Rychleho filtrovani dosahnete
pouze pri efektivnim pouziti klicu. Pokud vam filtrovani podle data
nevyhovuje, muzete to obejit tak, ze v tabulce vytvorite samostatna pole
pro rok, mesic a den s prislusnymi indexy, ale je to komplikace navic.
Take muzete misto datumu pracovat s indexy dnu vypocitanymi podle nejake
funkce napr. DAYOFYEAR(). Nejsem si vsak jist, zda dosahnete lepsich
vysledku, pokud jde o rychlost zpracovani dotazu ve srovnani s
filtrovanim podle data.
Petr Stetina
Další informace o konferenci Hw-list