Новость из категории: Информация

SQL Server 2016: агрегатный оконный оператор пакетного типа | Разделители, отличные от UNBOUNDED и CURRENT ROW

Содержание:
1. Строки с разделителями UNBOUNDED и CURRENT ROW;
2. RANGE с разделителями UNBOUNDED и CURRENT ROW;
3. Разделители, отличные от UNBOUNDED и CURRENT ROW (Вы читаете данный раздел);
4. Оконные функции смещения, функции LAG и LEAD;
5. Функции FIRST.VALUE и LAST.VALUE.
SQL Server 2016: агрегатный оконный оператор пакетного типа | Разделители, отличные от UNBOUNDED и CURRENT ROW

В случае использования агрегирующих оконных функций с фреймами, среди разделителей которых нет ни UNBOUNDED, ни CURRENT ROW, даже если вы опрашиваете данные в представлении columnstore, при расчете оконных функций всегда найдется дело для операторов построчного режима. И все же часть работы можно поручить операторам пакетного режима.

Допустим, вы вычисляете агрегирующую оконную функцию с фреймом, который начинается со спецификации UNBOUNDED PRECEDING (ускоренная оптимизация), но не заканчивается CURRENT ROW; например: SUM (val) с фреймом ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING. Если вы адресуете запрос к таблице Transactions (данные в представлении rowstore), то получите оптимизацию, подобную той, которая выполнялась в запросе Query 1 на рисунке ниже, поскольку она все еще считается ускоренной.

SQL Server 2016: агрегатный оконный оператор пакетного типа | Разделители, отличные от UNBOUNDED и CURRENT ROW
План выполнения запроса Query 1 (ROWS, построчный режим обработки данных в представлении rowstore)

Если вы направите запрос к таблице TransactionsCS (данные в представлении columnstore), то та часть плана, которая вычисляет количество строк, будет оптимизироваться с помощью оператора пакетного режима Window Aggregate, однако собственно агрегат будет оптимизирован с помощью традиционных операторов построчного режима для случаев с применением ускоренного варианта.



Если же вы адресуете запрос к таблице TransactionsDCS (rowstore плюс фиктивный индекс columnstore), оптимизатор просто выберет вариант с обработкой всех данных в построчном режиме, и вы получите план, подобный плану выполнения запроса Query 1 на рисунке выше.

SQL Server 2016: агрегатный оконный оператор пакетного типа | Разделители, отличные от UNBOUNDED и CURRENT ROW
Запрос Query 7

Если фрейм не будет начинаться со спецификации UNBOUNDED PRECEDING, формально он не будет относиться к категории фреймов, подлежащих ускоренной оптимизации. Однако в случае, если агрегат рассматривается как накопительный (таковыми, скажем, считаются SUM, COUNT, AVG, но не MIN и МАХ), оптимизатор может выполнить один неускоренный расчет на базе двух ускоренных расчетов; например, расчет SUM (val) с фреймом ROWS BETWEEN 99 PRECEDING AND CURRENT ROW может быть выполнен как SUM (val) с фреймом ROWS UNBOUNDED PRECEDING минус SUM (val) с фреймом ROWS BETWEEN UNBOUNDED PRECEDING AND 100 PRECEDING. Запрос в коде выше (я буду называть его Query 7) к таблице Transactions (rowstore) демонстрирует данную стратегию с использованием оптимизации в построчном режиме данных в представлении row store.

SQL Server 2016: агрегатный оконный оператор пакетного типа | Разделители, отличные от UNBOUNDED и CURRENT ROW
План выполнения запроса Query 7 (ROWS 99 PRECEDING AND CURRENT ROW, обработка в построчном режиме данных в представлении rowstore)

План выполнения данного запроса показан на рисунке выше.

SQL Server 2016: агрегатный оконный оператор пакетного типа | Разделители, отличные от UNBOUNDED и CURRENT ROW

В верхней части плана вычисляется агрегат ComulativeBottom (ROWS UNBOUNDED PRECEDING), а в нижней части — агрегат CumulativeTop (ROWS BETWEEN UNBOUNDED PRECEDING AND 100 PRECEDING). Следующий за этим оператор Compute Scalar вычитает значение CumulativeTop из значения CumulativeBottom, в результате чего получается конечный агрегат. Вот статистические данные, полученные мною входе выполнения данного запроса: продолжительность — 59 секунд, процессор — 59 секунд, логические операции считывания — 31 К, записи — 0.


Читать дальше...

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх