【发布时间】:2016-04-25 17:00:32
【问题描述】:
我有表结构 MySql v 5.7.11:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`gender` tinyint(2) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
而且这张表有超过1亿条记录 我需要从电子邮件字段中获取邮件域并按每个域进行计数,例如:google.com、yahoo.com 等。
我使用查询:
SELECT
SUBSTRING_INDEX(`users`.`email`, '@', -1) col1,
count(1)
FROM `users`
GROUP BY 1
但是这个查询需要2分钟多的时间。我无法更改此表的结构。如何不使用序列扫描,以及如何加速此查询?
【问题讨论】:
-
你使用什么 MySQL 版本?
-
导致性能问题的不是扫描,而是
group by上的文件排序。