У меня есть таблица с 37 000 000 строк и 3 ГБ данных.
CREATE TABLE `stats_raw` (
`user_id` INT(11) NOT NULL,
`date` DATETIME(6) NOT NULL,
`ip` VARBINARY(16) NULL DEFAULT NULL,
INDEX `stats_raw_user_id_index` (`user_id`),
INDEX `stats_raw_date_index` (`date`),
INDEX `stats_raw_user_id_data_index` (`user_id`, `date`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
Когда я пытаюсь выполнить следующий запрос (сгенерированный laravel, поэтому он может выглядеть странно):
select count(ip) as total, INET6_NTOA(ip) as ip
from `stats_raw`
where `user_id` = 1 and date(`date`) >= '2019-02-10'
group by `ip`
order by `total` desc
limit 10
Для возврата результатов требуется около 40 секунд.
Как я могу оптимизировать это на MySQL?