Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Оптимизация запроса для таблицы >700k записей (Олег) 29/10/2009 - 21:01:36
      Re: Оптимизация запроса для таблицы >700k записей (Елена) 30/10/2009 - 13:04:48
      Re: Оптимизация запроса для таблицы >700k записей (Олег) 03/11/2009 - 02:42:12

> Original message text:
> From: Олег - 29/10/2009 - 21:01:36
> Subject:Оптимизация запроса для таблицы >700k записей
> -----------------
> Версия mysql: 5.0.45
>
> my.ini:
> [mysqld]
> default-storage-engine=MyISAM
> sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
> max_connections=100
> query_cache_size=0
> table_cache=256
> tmp_table_size=18M
> thread_cache_size=8
> #*** MyISAM Specific options
> myisam_max_sort_file_size=100G
> myisam_sort_buffer_size=35M
> key_buffer_size=25M
> read_buffer_size=64K
> read_rnd_buffer_size=256K
> sort_buffer_size=256K
>
> имеется таблица учета визитов:
>
> create table visit (
> uid bigint not null auto_increment,
> ip bigint,
> pageref bigint,
> catref bigint,
> modelref bigint,
> customref bigint,
> visitdate datetime,
> osbaseid integer,
> browserid integer,
> browserversionmin integer,
> browserversionmaj varchar(255),
> java bit,
> javascript bit,
> backvisitid bigint,
> host varchar(255),
> referer varchar(255),
> refererbase varchar(255),
> mcref bigint,
> requri varchar(255),
> primary key (uid)
> ) CHARSET = utf8;
>
>
> в таблице сейчас находится чуть больше 700тыс. записей
>
> задача:
> необходимо выбрать из таблицы данные об уникальных посещениях по разным visit.catref за определенную дату.
>
> запрос:
> select count(this_.ip) as HITS, count(distinct this_.ip) as UNIQ, cast(visitdate as date) as VISIT_DATE, this_.catref as REF from visit this_ where cast(visitdate as date)='2009-10-10' and this_.catref is not null group by VISIT_DATE, REF;
>
> выполняется ~1300мс.
> и запрос без ограничения по дате (за все даты) выполняется по времени примерно также.
>
> пробовал добавить новую колонку visitday DATE, чтобы избежать наличия cast(.. as date), но это только замедлило запрос.
>
> добавление индексов на visitdate, pageref не помогло.
>
> подскажите как можно оптимизировать данный запрос/таблицу?
>


From: Олег - 03/11/2009 - 02:42:12
Subject:Оптимизация запроса для таблицы >700k записей
-----------------
Елена, проблема решилась добавлением двух индексов (catref,visitday,ip) и (visitday, catref ,ip)
первый используется при выборе за день, второй при выборе за период.
получилось:
запрос 1 (за период):
select count(this_.ip) as HITS, count(distinct this_.ip) as UNIQ, this_.catref as REF, visitday as VISIT_DAY
from visit this_
where visitday >= '2009-10-08' and visitday <='2009-10-15' and this_.catref is not null
group by REF,VISIT_DAY;
запрос 2 (за день):
select count(this_.ip) as HITS, count(distinct this_.ip) as UNIQ, this_.catref as REF, '2009-10-10' as VISIT_DAY
from visit this_
where visitday='2009-10-10' and this_.catref is not null
group by REF;

3. добавил индексы (catref,visitday,ip) и (visitday, catref ,ip)
запрос 1: 0.30 sec

+----+-------------+-------+-------+---------------------------------------------------------+----------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------------------------------------------------+----------+---------+------+--------+--------------------------+
| 1 | SIMPLE | this_ | range | catref,visitday,catref_2,visitday_2,visitday_3,catref_3 | catref_3 | 9 | NULL | 324764 | Using where; Using index |
+----+-------------+-------+-------+---------------------------------------------------------+----------+---------+------+--------+--------------------------+

запрос 2: 0.02 sec

+----+-------------+-------+-------+---------------------------------------------------------+------------+---------+------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------------------------------------------------+------------+---------+------+-------+--------------------------+
| 1 | SIMPLE | this_ | range | catref,visitday,catref_2,visitday_2,visitday_3,catref_3 | visitday_3 | 12 | NULL | 10332 | Using where; Using index |
+----+-------------+-------+-------+---------------------------------------------------------+------------+---------+------+-------+--------------------------+


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
36408



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |