sickboy
Новичок
оптимизация запроса count (distinc ())
Hi,
Есть вот такой запрос:
[SQL]SELECT COUNT(long_ip) AS hits, COUNT(DISTINCT long_ip) AS hosts FROM counter;[/SQL]
изначально он выполнялся (0.22 sec), при количестве строк всего в 20к.
потом я преобразовал хранение IPv4 как int, время запроса сократилось до 0.13 с.
если к такому запросу добавить еще и WHERE, т.е.:
[SQL]SELECT COUNT(long_ip) AS hits, COUNT(DISTINCT long_ip) AS hosts FROM counter WHERE long_ip<>'166762165' AND long_ip<>'167775161' AND long_ip<>'-1020642095' AND long_ip<>'1348732835';[/SQL]
то получаю 0.19 sec, но таких запросов приходится делать несколько, плюс еще в WHERE добавляются условия по дате.
Вот собственно сама таблица:
[SQL]| counter | CREATE TABLE `counter` (
`id` int(10) NOT NULL auto_increment,
`long_ip` int(10) NOT NULL,
`uri` varchar(255) NOT NULL,
`refer` text NOT NULL,
`agent` varchar(255) NOT NULL default '',
`unix_time` int(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `long_ip` (`long_ip`),
KEY `agent` (`agent`),
KEY `url` (`uri`),
KEY `unix_time` (`unix_time`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r |[/SQL]
можно ли еще как то оптимизировать запросы/таблицу?
Hi,
Есть вот такой запрос:
[SQL]SELECT COUNT(long_ip) AS hits, COUNT(DISTINCT long_ip) AS hosts FROM counter;[/SQL]
изначально он выполнялся (0.22 sec), при количестве строк всего в 20к.
потом я преобразовал хранение IPv4 как int, время запроса сократилось до 0.13 с.
если к такому запросу добавить еще и WHERE, т.е.:
[SQL]SELECT COUNT(long_ip) AS hits, COUNT(DISTINCT long_ip) AS hosts FROM counter WHERE long_ip<>'166762165' AND long_ip<>'167775161' AND long_ip<>'-1020642095' AND long_ip<>'1348732835';[/SQL]
то получаю 0.19 sec, но таких запросов приходится делать несколько, плюс еще в WHERE добавляются условия по дате.
Вот собственно сама таблица:
[SQL]| counter | CREATE TABLE `counter` (
`id` int(10) NOT NULL auto_increment,
`long_ip` int(10) NOT NULL,
`uri` varchar(255) NOT NULL,
`refer` text NOT NULL,
`agent` varchar(255) NOT NULL default '',
`unix_time` int(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `long_ip` (`long_ip`),
KEY `agent` (`agent`),
KEY `url` (`uri`),
KEY `unix_time` (`unix_time`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r |[/SQL]
можно ли еще как то оптимизировать запросы/таблицу?