COUNT(*) 与 GROUP BY 在 30M 行的表中

Chr*_*iet -1 mysql sql bigdata

我必须从包含 3000 万行的表中提取数据。表中的特征是visits_id(primary)survey_id company_id

我必须计算每家公司每次调查的访问次数,因为我知道一家公司可以进行多项调查。

我提出的查询是:

SELECT v.survey_id, v.company_id, COUNT(*)
FROM visit AS v
GROUP BY v.survey_id, v.company_id
Run Code Online (Sandbox Code Playgroud)

主要问题是它需要很长时间。无论如何优化查询?或者对于 SQL 是不可能做的事情还是不值得付出努力?

D S*_*ley 7

提高该查询性能的最直接方法是在 上添加复合索引survey_id, company_id

添加索引的主要缺点是写入时间更长。如果这是一个问题(或者不值得改进此查询),那么您可以在后台定期预处理数据并将计数存储在某处。显然,您可能会面临过时的计数。