Я написал платформу статистики / отслеживания для мониторинга активности моих сайтов. Для каждого пользователя в таблице создается запись с некоторой соответствующей информацией: IP, Ref, код страны GeoLocate и т. Д.
База данных содержит результаты более 7 мм и имеет размер около 4 ГБ.
Теперь у меня есть скрипт, который должен выполнять SUM-запросы для получения количества показов, кликов и т. Д. За определенный промежуток времени ($ from_date & $ to_date).
$query = "SELECT COUNT(ip) as tot, sum(clicked=0) as a0, sum(clicked=1) as a1, sum(converted=0) as a2, sum(converted=1) as a3 FROM tf_data WHERE cid='".$cid."' and stamp between ".$from_date." and ".$to_date." ";
Один этот запрос загружается НАВСЕГДА, даже если я на приличной машине VPS. У меня есть несколько других запросов, подобных этому, на моей странице сводки, что приводит к частому тайм-ауту скрипта (REQUEST TIMEOUT: этот запрос обрабатывается слишком долго, он задержан сервером. Если время не истекло, обратитесь к администратору этого веб-сайта, чтобы увеличить «Время ожидания подключения».)
Что мне делать? Как я могу справиться с этим огромным количеством данных? Должен ли я создать отдельную таблицу и запустить задание cron, чтобы вставить / обновить число показов, число кликов ...?
Как обычно это делается?
Спасибо как всегда!
РЕДАКТИРОВАТЬ: СТРУКТУРА СТОЛОВ:
CREATE TABLE `tf_data` (
`click_id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(225) NOT NULL,
`agent` text NOT NULL,
`referer` text NOT NULL,
`stamp` text NOT NULL,
`country` varchar(30) NOT NULL,
`src` text NOT NULL,
`adspot` varchar(250) NOT NULL,
`cid` text NOT NULL,
`adid` text NOT NULL,
`lp` varchar(250) NOT NULL,
`offer` int(11) NOT NULL,
`clicked` int(11) NOT NULL,
`converted` int(11) NOT NULL,
`converted2` int(11) NOT NULL,
`price` varchar(255) NOT NULL,
PRIMARY KEY (`click_id`),
UNIQUE KEY `ip` (`ip`)
) ENGINE=MyISAM AUTO_INCREMENT=9599999 DEFAULT CHARSET=latin1