punchos
Новичок
Оптимизация Group by
Здравствуйте!
Есть таблица обращений пользователей....
со структурой
CREATE TABLE connects (
id int(11) NOT NULL auto_increment,
uid varchar(50) default NULL,
day int,
month int,
year int,
PRIMARY KEY (id),
KEY year (year),
KEY month (month),
KEY uid (uid),
) ENGINE=MyISAM;
в таблицу попадает запись при каждом обращении пользователя к сервису...в поле uid уникальный идентификатор пользователя...
такая задача....вывести количество уникальных обращений(новых пользователей) за ноябрь 2009(например), по дням...
то есть...1 ноября 2009 к системе обращались 120 тыс. новых пользователей...2 - 134...и т.д.
запрос как я себе его вижу выглядит так
select ss.day, COUNT(distinct ss.uid) AS count_conects
from connects as ss inner join (SELECT uid,min(id) as id_min FROM connects group by uid) as dd on ss.id=dd.id_min WHERE ss.month=11 AND ss.year=2009 GROUP BY ss.day;
в таблице сейчас 20 млн. записей...отрабатывает он 40-50 минут....
я так понимаю основной тормоз подзапрос SELECT uid,min(id) as id_min FROM connects group by uid...хотя могу ошибаться
у кого какие мысли по оптимизации?
Здравствуйте!
Есть таблица обращений пользователей....
со структурой
CREATE TABLE connects (
id int(11) NOT NULL auto_increment,
uid varchar(50) default NULL,
day int,
month int,
year int,
PRIMARY KEY (id),
KEY year (year),
KEY month (month),
KEY uid (uid),
) ENGINE=MyISAM;
в таблицу попадает запись при каждом обращении пользователя к сервису...в поле uid уникальный идентификатор пользователя...
такая задача....вывести количество уникальных обращений(новых пользователей) за ноябрь 2009(например), по дням...
то есть...1 ноября 2009 к системе обращались 120 тыс. новых пользователей...2 - 134...и т.д.
запрос как я себе его вижу выглядит так
select ss.day, COUNT(distinct ss.uid) AS count_conects
from connects as ss inner join (SELECT uid,min(id) as id_min FROM connects group by uid) as dd on ss.id=dd.id_min WHERE ss.month=11 AND ss.year=2009 GROUP BY ss.day;
в таблице сейчас 20 млн. записей...отрабатывает он 40-50 минут....
я так понимаю основной тормоз подзапрос SELECT uid,min(id) as id_min FROM connects group by uid...хотя могу ошибаться
у кого какие мысли по оптимизации?