У меня проблемы с получением приличного времени запроса из большой таблицы MySQL, в настоящее время это занимает более 20 секунд. Проблема заключается в GROUP BY, так как MySQL должен запустить файловую сортировку, но я не понимаю, как мне обойти это
QUERY
SELECT play_date, COUNT(DISTINCT(email)) AS count
FROM log
WHERE type = 'play'
AND play_date BETWEEN '2009-02-23'
AND '2009-02-24'
GROUP BY play_date
ORDER BY play_date desc
EXPLAIN
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE log ALL type,type_2 NULL NULL NULL 530892 Using where; Using filesort
КОНСТРУКЦИЯ СТОЛОВ
CREATE TABLE IF NOT EXISTS `log` (
`id` int(11) NOT NULL auto_increment,
`email` varchar(255) NOT NULL,
`type` enum('played','reg','friend') NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`play_date` date NOT NULL,
`email_refer` varchar(255) NOT NULL,
`remote_addr` varchar(15) NOT NULL,
PRIMARY KEY (`id`),
KEY `email` (`email`),
KEY `type` (`type`),
KEY `email_refer` (`email_refer`),
KEY `type_2` (`type`,`timestamp`,`play_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=707859 ;
Если кто-нибудь знает, как я могу улучшить скорость, я был бы очень рад
Tom
EDIT
Я добавил новый индекс только с play_date и типом, но MySQL отказывается использовать его
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE log ALL play_date NULL NULL NULL 801647 Using where; Using filesort
Этот индекс был создан с использованием ALTER TABLE log
ADD INDEX (type
, play_date
);