表的总和列,按表分区进行分组



我有一个每日指标的表:

|DateID   | Metric1 | Metric2|
 20190501      24       34
 20190502      25       56 
 .....        ....     ....

桌子的行超过1.5亿行。它是按每月的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作为月gon,并在substring(dateID,1,6) = MonthID上加入我的表格,然后按月选择总和分组。但是这太慢了。我认为,如果我可以直接使用表的分区来分组,那将会更快。有什么办法吗?如果没有任何改善总绩效的方法?

您可以尝试两个级别的聚合:

select left(dateid, 6) as yyyymm,
       sum(metric1), sum(metric2)
from (select dateid, sum(metric1) as metric1, sum(metric2) as metric2
      from t
      group by dateid
     ) t
group by left(dateid, 6)
order by yyyymm;

内部聚合仅在分区键上明确。

我应该注意,我不知道SQL Server是否在分区数据库上优化了group by,当分区密钥是一个聚合密钥时。但是,这可能是值得尝试的。

相关内容

  • 没有找到相关文章

最新更新