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

SQL Server 2016: агрегатный оконный оператор пакетного типа | RANGE с разделителями 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: агрегатный оконный оператор пакетного типа | RANGE с разделителями UNBOUNDED и CURRENT ROW

Вообще-то я не люблю пробуждать в людях слишком высокие ожидания до того, как им будет продемонстрирована какая-нибудь новинка, но здесь я сделаю исключение. То, что я опишу сейчас, — это, на мой взгляд, самое значительное преимущество из тех, что дает применение оператора Window Aggregate. Некоторым образом оно связано с недостатком метода построчной обработки оконных агрегатов с использованием блока фрейма RANGE. Рассмотрим запрос, приведенный в коде ниже (назовем его Query 4).

SQL Server 2016: агрегатный оконный оператор пакетного типа | RANGE с разделителями UNBOUNDED и CURRENT ROW
Query 4

Логическое различие между ROWS и RANGE состоит в том, как они трактуют связи в упорядочивающих значениях в тех случаях, когда упорядочение не является уникальным. Предположим, например, что таблица включает столбец, содержащий дату совершения транзакции, и что мы использовали этот столбец в предложении, определяющем порядок в окне. Если в случае использования оператора ROWS вычисляется промежуточная сумма, не включающая связи, то при использовании оператора RANGE связи при подсчете учитываются. Так, при использовании оператора RANGE во всех строках, приходящихся на одну и ту же дату, будет указываться одна и та же промежуточная сумма.



Как вы можете догадаться, в случаях, когда упорядочение в рамках разделения является уникальным, а именно с таким случаем мы имеем дело, ибо упорядочение строится на идентификаторе транзакции, операторы ROWS и RANGE имеют одинаковое значение.

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

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

В этом плане не выполняется построчный расчет чисел. Здесь используются два оператора Segment — один для разделения окна, а другой — для определения места, где изменяется значение упорядочения. Остальное, пожалуй, выполняется так же, как при вычислениях с использованием ROWS, как было показано выше для запроса Query 1 на рисунке ниже. Итак, можно предположить, что показатели выполнения запросов Query 4 и Query 1 аналогичны. Однако если бы все было так просто!

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


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

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

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

Поделиться

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

Комментарии

^ Наверх