MySQL :: Partial datetime index?

1 отговора 207 прегледа
#1

MySQL :: Partial datetime index?

Сега...знам, че пак ще бъда препратен към официалните канали, но понеже в MySQL изглежда, че няма частични индекси върху datetime поле - което и не знам дали е възможно теоретично, но изглежда като доста добър feature, как е най-добре да оперирам върху datetime index, при използване само на части от него?

Въпреки че отговорът изглежда очевиден, предвид на емпиричния опит, все пак съм длъжен да попитам - кое от двете е по-добро:

select count(*) from tbl where date_format(datetime, '%Y-%m-%d')=curdate()

или

select count(*) from tbl where datetime >= curdate() and datetime < curdate() + interval 1 day

Поне при мен второто е 2 пъти по-бързо, предполагам защото "не разрушавам" индекса.

А има и трети вариант, който ми изглежда доста селски, но сигурно ще е още по-бърз - да се дублира информацията за датата във второ date поле.

Изобщо, ако теоретично ми трябва само годината от datetime поле, пак ли ще е по-добре да задавам интервал 1 януари - 31 декември?

Everything louder than everything else...
Отговор
в отговор на Dakota #2

Re: MySQL :: Partial datetime index?

DATE_FORMAT връща стринг, а не datetime (обратната функция е STR_TO_DATE)

ако ти трябва само годината и искаш да пазиш дата, ползвай DATE, пък после с YEAR можеш да си extract-ваш годината

Отговор