[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Группировка по timestamp
Страницы: 1, 2, 3
12345
CREATE TABLE IF NOT EXISTS `building_history` (
`id` int(11) unsigned NOT NULL,
`id_user` mediumint(8) unsigned NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`num_pole` smallint(5) unsigned NOT NULL,
`id_building` enum('201','202','203','204','205','206','207','208') NOT NULL,
`action` enum('1','2','3') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `building_history`
ADD PRIMARY KEY (`id`),
ADD KEY `date` (`date`);

ALTER TABLE `building_history`
MODIFY `id` int(11) unsigned NOT NULL AUTO_INCREMENT;



Необходимо получить статистику за последние 30 дней(на каждый день), учитывать только те записи, где action = 1


Делаю так
SELECT id_building, COUNT(1) AS cnt, CAST(`date` AS DATE)  AS date2
FROM `building_history`
WHERE `action` = 1 AND date > DATE_ADD(NOW(), INTERVAL - 30 DAY)
GROUP BY date2, `id_building`



При учете, что в таблице 3.500.000 записей(165 мб) запрос выполняется 2.5 секунд.


Может можно сделать выборку быстрее?




UPD: Условие date > DATE_ADD(NOW(), INTERVAL - 30 DAY) можно откинуть
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.