Archil
Новичок
Всем привет. Тружусь над разработкой системы по управлению медийной рекламы на сайте. Одна из основных частей проекта - сбор статистики показов и кликов, при этом надо хранить страну и тип девайса, с которого совершен запрос.
Вот таблица статистики:
В нее за день набегает в среднем 1,5 миллиона записей, значит в месяц около 45 миллиона записей.
Теперь самое главное. Нужно просматривать статистику с группировкой по 2-м полям. Например такой запрос:
вот его EXPLAIN:
1. MYISAM
2. INNODB
При 3-х миллионах записей MySQL падает, при 1-ом миллионе скорость выборки где-то 15-20 секунд.
Простановка индексов по 2-м полям не сильно помогла. Нужна ваша помощь для оптимизации самой таблицы statistics и запроса.
Вот таблица статистики:
Код:
create table statistics
(
visit_date int default '0' not null,
sait_id int default '0' not null,
block_id int default '0' not null,
advertisement_id int default '0' not null,
teaser_group_id int default '0' not null,
teaser_id int default '0' not null,
link_id int default '0' not null,
device_type smallint(2) default '0' not null,
advertisement_system varchar(255) default '' not null,
country varchar(4) default '' not null,
visit_guid bigint default '0' not null,
id bigint not null auto_increment,
primary key (visit_guid, visit_date, sait_id, block_id, advertisement_id, teaser_group_id, teaser_id, text_block_id, custom_widget_id, banner_id, link_id, device_type, country)
)
;
create index statisticsId
on statistics (id)
;
comment on column statistics.device_type is 'Тип трафика, 1 - мобильный, 2 - десктоп'
;
Теперь самое главное. Нужно просматривать статистику с группировкой по 2-м полям. Например такой запрос:
Код:
SELECT
sait_id,
count(id) AS counter,
link_id
FROM statistics
WHERE statistics.visit_date = 1498694400
GROUP BY sait_id, link_id;
1. MYISAM

2. INNODB

При 3-х миллионах записей MySQL падает, при 1-ом миллионе скорость выборки где-то 15-20 секунд.
Простановка индексов по 2-м полям не сильно помогла. Нужна ваша помощь для оптимизации самой таблицы statistics и запроса.