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