大型聚合查询优化

问题描述 投票:0回答:1

我有一个带有列的表事件

user_id, event_type, date
。我需要创建一个表,通过以下方式聚合它

select user_id, event_type, count(*)
group by user_id, event_type where date >= (30 days ago) and date <= today

然而,事件表相当大,每天有超过数十亿行。目前,我每天都会对其进行汇总,计算一天的汇总大约需要一个小时。然而,如果我需要回填数据,那就很头疼了,这意味着我需要一一重新计算最近 30 天的聚合,而且要花很长时间。无论如何,这可以简化吗?

sql mysql presto
1个回答
0
投票

无论如何这可以简化吗?

创建相应的索引。测试哪个索引在您的系统和真实数据上更安全:

CREATE INDEX idx1 ON table (user_id, event_type, `date`);
CREATE INDEX idx2 ON table (`date`, user_id, event_type);

参见小提琴

© www.soinside.com 2019 - 2024. All rights reserved.