сумма столбцов таблицы, группировка по разделам таблицы - PullRequest
2 голосов
/ 23 мая 2019

У меня есть таблица с дневными показателями:

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

Таблица содержит более 150 миллионов строк. Он разделен на 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. Однако это слишком медленно. Я думаю, что было бы быстрее, если бы я мог как-то группировать, используя непосредственно разделы таблицы. Есть ли способ сделать это? Если нет какого-либо способа улучшить общую производительность?

1 Ответ

0 голосов
/ 23 мая 2019

Вы можете попробовать два уровня агрегации:

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 для многораздельных баз данных, когда ключ разделения является ключом агрегации. Тем не менее, это может, так что это стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...