У меня есть несколько таблиц в MySQL, в которых хранятся хронологические данные. Я добавил индекс покрытия для этих таблиц с полем даты в конце. В своих запросах я выбираю данные за некоторый период, используя операцию BETWEEN для поля даты. Итак, мой оператор WHERE состоит из всех полей из покрывающего индекса.
Когда я выполняю запрос EXPLAIN в столбце Extra, у меня есть «Используя где» - так что, как я думаю, это означает, что это поле даты не ищется в индексе. Когда я выбираю данные за один период — я использую операцию «=» вместо МЕЖДУ, и «Использование где» не появляется — все ищутся в индексе.
Что я могу сделать, чтобы все мои операторы WHERE искались в индексе, содержащем операцию BETWEEN?
ОБНОВЛЕНИЕ:
структура таблицы:
CREATE TABLE phones_stat (
id_site int(10) unsigned NOT NULL,
group smallint(5) unsigned NOT NULL,
day date NOT NULL,
id_phone mediumint(8) unsigned NOT NULL,
sessions int(10) unsigned NOT NULL,
PRIMARY KEY (id_site,group,day,id_phone) USING BTREE
) ;
запрос:
SELECT id_phone,
SUM(sessions) AS cnt
FROM phones_stat
WHERE id_site = 25
AND group = 1
AND day BETWEEN '2010-01-01' AND '2010-01-31'
GROUP BY id_phone
ORDER BY cnt DESC