我有一个包含1.5M +行的表,用于记录来自网站的下载,该网站的电子邮件地址是已下载的内容。我想找到那些下载次数超过100次的人。这是我测试过的,但是当我在服务器上测试它时query-time
超过11秒!你知道更快的方式吗?
SELECT `email`
FROM `table_of_downloads`
GROUP BY `email`
HAVING COUNT( * ) >100
以下是按要求提供的EXPLAIN结果:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table_of_downloads ALL NULL NULL NULL NULL 1656546 Using temporary; Using filesort
答案 0 :(得分:0)
您需要在email
列上添加索引。否则,查询必须扫描整个表以计算每封电子邮件的行数。除了索引之外,没有办法让它更快。
答案 1 :(得分:0)
让其他人知道,我只是将类型从tinytext
更改为varchar(128)
,查询时间缩短为0.03秒。