Классика баз данных - статьи

       

Группировка и агрегация


Поскольку группировка и агрегация очень распространены в запросах поддержки принятия решений, в NonStop SQL используется несколько методов, позволяющих эффективно выполнять группировку и агрегацию.

Если операнд агреатных функций MIN или MAX является столбцом, входящим в ключ индекса, и запрос содержит предикаты сравнения по равенству на других столбцах ключа, предшествующих данному, то NonStop SQL вычисляет агрегат, позиционируясь на первую или последнюю запись заданного диапазона ключа для индекса. Соответствующие строки всегда содержит минимальное и максимальное значение соответственно для этого столбца индекса. Исполнитель просто читает первую строку, возвращаемую файловой системой, и возвращает приложению MIN или MAX.

Как описывалось в разд. 3, NonStop SQL также выполняет группировку и агрегацию в параллель. Этим методом для заданного запроса могут быть вычислены любые агрегатные функции SQL. Оптимизатор автоматически выбирается эту стратегию для запросов с единственной переменной, а также в тех случаях, когда агрегатная функция ссылается на наиболее внутреннюю таблицу последовательности соединений. Эта оптимизация сокращает число сообщений, которыми обменивается файловая система SQL с дисковым процессом, а также снижает сетевой трафик. Она также используется для группировки, если строки читаемые с диска, находятся в порядке группировки, т.е. если столбцы группировки образуют префикс ключа индекса.

В третьем выпуске системы в исполнителе поддерживаются новые алгоритмы выполнения группировки и агрегации с использованием хэширования, а не сортировки. Это метод эффективнее сортировки и менее трудоемкий. Если сгруппированные данные помещаются в основную память, то группировка выполняется за один проход над необработанными данными. Если сгруппированные данные не помещаются в основной памяти, то необработанные данные переписываются на диск с использованием крупных пересылок, соответствующих хэш-значению столбцов группировки. Впоследствии секции необработанных данных последовательно считываются в соответствии с их последовательными хэш-значениями. Группировка и агрегация выполняются после повторного считывания необработанных данных.

Этот метод гарантирует, что необработанные данные считываются не более двух раз. Метод используется как в последовательных, так и в параллельных планах выполнения. Когда этот метод используется в ESP, каждый подчиненный ESP хэширует и группирует данные, принадлежащие к локальному разделу. После удаления дубликатов результирующие группы и частичные агрегаты посылаются master-исполнителю, который производит окончательный результат. Метод сокращает сетевой трафик за счет локального выполнения сортировки и агрегации и сокращает межсетевую передачу данных.



Содержание  Назад  Вперед