【发布时间】:2019-10-09 23:02:24
【问题描述】:
我有一张包含每日指标的表格:
|DateID | Metric1 | Metric2|
20190501 24 34
20190502 25 56
..... .... ....
该表有超过 1.5 亿行。它每月按 DateID 进行分区(每个分区包含从月初到下个月第一天的 DateID 行)。我的一些分区:
rows pages comparison value
4205460 174009 less than 20180801
4205460 174097 less than 20180901
4069800 168449 less than 20181001
4205460 174009 less than 20181101
4069800 168433 less than 20181201
4205460 174097 less than 20190101
4205460 174009 less than 20190201
3798480 157201 less than 20190301
4205460 174097 less than 20190401
4069800 168449 less than 20190501
2984520 123545 less than 20190601
我想每月select sum(metric1), sum(metric2)。
到目前为止,我正在做的是创建一个临时表,其中包含 YYYYMM 作为 MonthID,并在 substring(dateID,1,6) = MonthID 上加入我的表,然后选择按 MonthID 分组的总和。然而这太慢了。我认为如果我可以通过直接使用表的分区进行分组会更快。有什么办法吗?如果没有任何方法可以提高总和性能?
【问题讨论】:
-
DateID 列是否存储为 int?
-
不,它是 varchar(8)
标签: sql sql-server sql-server-2008