Для справки, это моя текущая таблица:
`impression` (
`impressionid` bigint(19) unsigned NOT NULL AUTO_INCREMENT,
`creationdate` datetime NOT NULL,
`ip` int(4) unsigned DEFAULT NULL,
`canvas2d` tinyint(1) DEFAULT '0',
`canvas3d` tinyint(1) DEFAULT '0',
`websockets` tinyint(1) DEFAULT '0',
`useragentid` int(10) unsigned NOT NULL,
PRIMARY KEY (`impressionid`),
UNIQUE KEY `impressionsid_UNIQUE` (`impressionid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=447267 ;
В нем ведется запись всех показов на определенной странице. После одного дня пробежки он собрал 447266 просмотров. Это много записей.
Теперь я хочу количество посетителей в минуту. Я могу легко получить их так:
SELECT COUNT( impressionid ) AS visits, DATE_FORMAT( creationdate, '%m-%d %H%i' ) AS DATE
FROM `impression`
GROUP BY DATE
Этот запрос, конечно, занимает много времени. Прямо сейчас около 56 секунд.
Так что мне интересно, что делать дальше. Должен ли я:
Создание индекса на дату создания (я не знаю, поможет ли это, так как я использую функцию для изменения этих данных, по которой они группируются)
Создание новых полей, в которых хранятся часы и минуты отдельно.
Последнее приведет к дублированию данных, и я ненавижу это. Но, может быть, это единственный способ в этом случае?
Или я должен пойти по-другому?