Реклама

В процессе реализации механизма поддержки оконных функций в системе SQL Server можно выделить три основные вехи. В версии SQL Server 2005 были реализованы агрегатные оконные функции без фрейма и ранжирующие оконные функции. В версии SQL Server 2012 появились агрегатные оконные функции с фреймом, а также оконные функции смещения и статистические оконные функции. В версии SQL Server 2016 была впервые предусмотрена возможность использования агрегатного оконного оператора пакетного режима, что позволило значительно повысить скорость выполнения большинства оконных функций. Работе с этим оператором и посвящена данная серия статей.

Изначально я планировал заниматься написанием очередной статьи из серии выполнения логических запросов Logical Query Processing, но как раз в это время была выпущена версия SQL Server 2016, и я подумал, что надо бы подготовить серию из трех статей, посвященную замечательному новому средству — агрегатному оконному оператору пакетного режима. И только выполнив эту задачу, я вернусь к работе над серией о Logical Query Processing. Итак, некоторые полагают, что оконные функции полезны только при решении специализированных задач, связанных с анализом данных. На практике же эти функции играют гораздо более заметную и важную роль — они предоставляют нам особую парадигму для решения задач по обработке запросов, альтернативную традиционной схеме на базе предикатов. Иными словами, вместо того чтобы решать задачи по обработке запросов с использованием классических канонов на базе объединений и подзапросов с предикатами в предложениях ON и WHERE, вы можете воспользоваться оконными функциями. Главное преимущество этого способа состоит в том, что оконные функции часто позволяют получать более изящные и эффективные решения, чем те, что дают традиционные средства. Вот уже более десяти лет я рассматриваю такие решения в своих статьях и буду продолжать заниматься этим в дальнейшем. На мой взгляд, нужно только набраться терпения, и мы увидим, как все новые и новые специалисты будут осознавать несомненные достоинства оконных функций, а эти функции будут все чаще включаться в программы пользователей. Ведь с течением времени более эффективные инструментальные средства приходят на смену устаревающим, это естественный закон эволюции.

Стандарт SQL, а также другие платформы баз данных содержат множество мощных оконных функций с богатым потенциалом, и будем надеяться, что в дальнейшем разработчики SQL Server еще реализуют средства для их использования. В качестве примера можно назвать стандартные вложенные оконные функции и блок с фреймом окна RANGE с разделителями на базе INTERVAL, разработанную специалистами Teradata конструкцию RESET WHEN, используемое в продуктах Oracle предложение MATCH_RECOGNIZE и т. д.

Отмечу, кстати, для тех, кто хотел бы иметь возможность запускать опубликованные в данной статье примеры кода: вам потребуется доступ к системам SQL Server 2016 редакций Enterprise, Enterprise Evaluation или Developer.

Обработка в пакетном режиме и специальный прием для ее использования применительно к данным в формате rowstore

Исторически сложилось так, что в системе SQL Server использовалась модель исполнения на базе строк. Это означает, что операторы в плане выполнения запроса обрабатывают данные строка за строкой. Системе SQL Server приходится оценивать сведения о метаданных построчно. Все внутренние функции, вызываемые оператором, применяются построчно. В версии SQL Server 2012 был реализован новый исполнительный механизм, который при использовании совместимых с ним операторов обрабатывает в каждый момент не одну строку, а целый пакет строк. В версиях SQL Server 2014 и 2016 возможности пакетной обработки были заметно расширены. На рисунке 1 представлена схема пакета строк.

 

Пакет строк
Это не вся статья. Полная версия доступна только подписчикам журнала. Пожалуйста, авторизуйтесь либо оформите подписку.
Купить номер с этой статьей в PDF