lodErunnEr писал(а):отправил ЛС.
Код: Выделить всё
SQL-запрос #1:
--------------
CREATE TABLE `log2` (
`udate` DATE NOT NULL ,
`ip` INT( 1 ) UNSIGNED NOT NULL ,
`bytes` BIGINT( 1 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `udate` , `ip` )
) TYPE = MYISAM CHARACTER SET cp1251 COLLATE cp1251_general_ci COMMENT = 'Суммарный трафик пользователей';
SQL-запрос #2:
--------------
INSERT INTO `log2`
SELECT from_unixtime( `time` , '%Y-%m-%d' ) `udate` , inet_aton( `clientadr` ) ip, sum( `bytes` ) `bytes`
FROM accesslog
GROUP BY `udate` , `ip`
Отчётный запрос по сотрудникам
(Показывает записи 0 - 29 (146 всего, Запрос занял 0.0941 сек))
--------------
SELECT
lg.udate,
INET_NTOA(lg.ip) ip,
lg.bytes,
`ip`.descript
FROM
`log2` lg
LEFT JOIN `ip`
ON
lg.`ip` = INET_ATON(`ip`.`adr`)
WHERE
`udate` BETWEEN "2008-06-01" AND "2008-06-31"
---------------
udate ip bytes descript
2008-06-17 192.168.242.34 7794283 NULL
2008-06-17 192.168.242.200 1931790 NULL
2008-06-17 192.168.242.211 672064 NULL
2008-06-18 192.168.242.13 64731682 NULL
2008-06-18 192.168.242.16 42679375 NULL
2008-06-18 192.168.242.18 2375509 NULL
2008-06-18 192.168.242.19 2166456 NULL
2008-06-18 192.168.242.21 14700619 NULL
2008-06-18 192.168.242.30 159556 NULL
2008-06-18 192.168.242.34 97672539 NULL
2008-06-18 192.168.242.35 33631446 test user 3
2008-06-18 192.168.242.41 22958417 NULL
2008-06-18 192.168.242.43 21321293 NULL
2008-06-18 192.168.242.53 26118536 NULL
2008-06-18 192.168.242.55 57986412 NULL
2008-06-18 192.168.242.58 471890 NULL
2008-06-18 192.168.242.64 43282787 NULL
2008-06-18 192.168.242.65 2967533 NULL
2008-06-18 192.168.242.71 300448 NULL
2008-06-18 192.168.242.73 112823136 test user 2
.....
Итого
Код: Выделить всё
Было:
-------------
Данные 46,936 KB
Индекс 7,877 KB
Всего 54,813 KB
Формат динамический
Сравнение latin1_swedish_ci
Ряды 357,518
Длина ряда ? 134
Размер ряда ? 157 Bytes
Стало:
-------------
Данные 2,336 Bytes
Индекс 4,096 Bytes
Всего 6,432 Bytes
Формат фиксированный
Сравнение cp1251_general_ci
Ряды 146
Длина ряда ? 16
Всю остальную информацию нужно брать из логов, а в базе хранить только отчётную информацию.
У меня в статистике по логам бегает греп или авк, отчёты берутся из базы, в итоге скорость достпуа к любой информации составляет доли секунды.