>Добрый день. Есть таблица с таким содержанием.
>Надо выбрать суммарное количество traffic_cur за целый час.
>Делаю так:SELECT sum(`traffic_cur`) AS `TR_AMOUNT` FROM `userdata` WHERE `user` = 'arthur' AND
>`date` LIKE '2008-01-01 $hour%';hour = 01 например.
>Подскажите,как изменить сей запрос,чтоб на нее тратилось меньше времени,учитывая что база большая. SELECT sum(`traffic_cur`) AS `TR_AMOUNT`
FROM `userdata`
WHERE
`user` = 'arthur' AND
`date` >= '2008-01-01 $hour%' AND
`date` < DATE_ADD('2008-01-01 $hour%', INTERVAL 1 HOUR);
>[оверквотинг удален]
> `date` datetime NOT NULL default '0000-00-00 00:00:00',
> `ip_addr` varchar(15) NOT NULL,
> `user` char(8) NOT NULL default 'unknown',
> `traffic_cur` int(15) unsigned NOT NULL default '0',
> KEY `date` (`date`),
> KEY `user` (`user`),
> KEY `traffic_cur` (`user`),
> KEY `tr_us_dt` (`date`,`user`,`traffic_cur`)
>) ENGINE=MyISAM DEFAULT CHARSET=latin1;
>Заранее благодарен!
Хранить адреса в виде строк не эффективно:
`ip_addr` varchar(15) NOT NULL,
лучше использовать:
`ip_addr` INTEGER NOT NULL,
При вставке в таблицу использовать встроенную функцию INET_ATON
mysql> SELECT INET_ATON('209.207.224.40');
-> 3520061480
А в конечных запросах использовать встроенную функцию INET_NTOA
mysql> SELECT INET_NTOA(3520061480);
-> '209.207.224.40'
Хотя это как кому нравится.