Per this comment есть по крайней мере 8 различных способов для выбора записей по годам и месяцам:Самый быстрый способ выбрать по году-месяцу?
- где дата, как '2005-01-%'
- где DATE_FORMAT (дата, '% Y-% м') = '2005-01'
- , где ЭКСТРАКТ (YEAR_MONTH от даты) = '200501'
- где год (дата) = '2005' и месяц (дата) = '1'
- , где подстроку (дата, 1 , 7) = '2005-01'
- где дата между '2005-01-01' и '2005-0 1-31 '
- , где дата> =' 2005-01-01 'и дата < =' 2005-01-31 '
- , где дата IN (' 2005-01-01 ',' 2005-01-02 ',' 2005-01-03 ',' 2005-01-04 ',' 2005-01-05 ',' 2005-01-06 ',' 2005-01-07 ',' 2005-01-08 ', '2005-01-09', '2005-01-10', '2005-01-11', '2005-01-12', '2005-01-13', '2005-01-14', '2005 -01-15 ',' 2005-01-16 ',' 2005-01-17 ',' 2005-01-18 ',' 2005-01-19 ',' 2005-01-20 ',' 2005-01 -21 ',' 2005-01-22 ',' 2005-01-23 ',' 2005-01-24 ',' 2005-01-25 ',' 2005-01-26 ',' 2005-01-27 », '2005-01-28', '2005-01-29', '2005-01-30', '2005-01-31')
который является самым быстрым в пункте в WHERE ? Который самый быстрый в GROUP BY? Может ли кто-нибудь из них воспользоваться индексом?
Мой конкретный запрос выглядит следующим образом:
select count(*)
from quotes quote
where EXTRACT(YEAR_MONTH FROM qtime) = :date
Где qtime
является TIMESTAMP
.
Но я также должен получить месяц с наибольшим количеством цитат:
select date_format(qtime,'%Y-%m') d,count(*) c
from quotes
group by EXTRACT(YEAR_MONTH FROM qtime)
order by c desc, qid asc limit 1;
в этом случае я не могу использовать операторы сравнения.
Я думаю, что число 6 довольно быстро. –
он тоже выключен одним ... – thebjorn
6 и 7 могут использовать индексы – Strawberry