我有一个带有列的表事件
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 天的聚合,而且要花很长时间。无论如何,这可以简化吗?
无论如何这可以简化吗?
创建相应的索引。测试哪个索引在您的系统和真实数据上更安全:
CREATE INDEX idx1 ON table (user_id, event_type, `date`);
CREATE INDEX idx2 ON table (`date`, user_id, event_type);
参见小提琴