0

我有一张包含 150 万多行的表格,用于记录来自网站的下载,该网站有下载内容的人的电子邮件地址。我想找到那些下载次数超过 100 次的人。这是我测试过的,但是query-time当我在服务器上测试时超过 11 秒!你知道更快的方法吗?

SELECT  `email`
FROM  `table_of_downloads` 
GROUP BY  `email` 
HAVING COUNT( * ) >100

这是所要求的解释结果:

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
4

2 回答 2

0

您需要在email列上有一个索引。否则,查询必须扫描整个表以计算每封电子邮件的行数。除了使用索引之外,没有其他方法可以使其更快。

于 2013-08-18T01:47:18.830 回答
0

为了让其他人知道,我只是将类型从tinytextto更改varchar(128)为查询时间下降到 0.03 秒。

于 2013-08-18T05:45:01.813 回答