如果您正在执行最小/最大/平均查询,您更喜欢使用聚合表还是简单地查询原始表中的一系列行?
这显然是一个非常开放的问题,没有一个正确的答案,所以我只是在寻找人们的一般建议。假设原始数据表由时间戳、数字外键(比如用户 ID)和十进制值(比如购买金额)组成。此外,假设表中有数百万行。
我都做了,我很伤心。一方面,聚合表给了我更快的查询速度,但代价是增加了额外的表。显示聚合范围的当前值要么需要完全返回原始数据表,要么需要组合更细粒度的聚合。我发现在应用程序代码中跟踪查询哪个聚合表的时间比您认为的要多,并且需要更改架构,因为原始聚合范围总是不够的(“但我想看看我们在过去 3 个支付期的销售额!”)。
另一方面,从原始数据中查询可能会非常慢,但让我对数据范围非常灵活。当范围边界发生变化时,我只需更改查询,而不必重建聚合表。同样,应用程序代码需要更少的更新。我怀疑如果我在索引方面更聪明(即始终具有良好的覆盖索引),我将能够减少从原始数据中选择的惩罚,但这绝不是灵丹妙药。
无论如何我可以两全其美吗?