MySQL :: Partial datetime index?
1 отговора
207 прегледа
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...
Въпреки че отговорът изглежда очевиден, предвид на емпиричния опит, все пак съм длъжен да попитам - кое от двете е по-добро:
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...
Re: MySQL :: Partial datetime index?
DATE_FORMAT връща стринг, а не datetime (обратната функция е STR_TO_DATE)
ако ти трябва само годината и искаш да пазиш дата, ползвай DATE, пък после с YEAR можеш да си extract-ваш годината
ако ти трябва само годината и искаш да пазиш дата, ползвай DATE, пък после с YEAR можеш да си extract-ваш годината