Версия 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 не помогло.
подскажите как можно оптимизировать данный запрос/таблицу?
Отредактированно Олег (29.10.2009 20:53:25)