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

       

в этом плане выполняется соединение


Если в этом плане выполняется соединение хэшированием, то вся таблица S (после применения локального предиката выборки) посылается каждому ESP, который обрабатывает раздел внешней таблицы R (фрагментировать и реплицировать). Затем каждый ESP строит из S хэш-таблицу и выполняет соединение хэшированием. Соединения хэшированием работают для этого плана очень хорошо в тех случаях, когда таблица S относительно невелика. В отличие от планов этого типа с соединением вложенными циклами, план с соединением хэшированием позволяет избежать конкуренции по внутренней таблице и достичь высокого уровня параллелизма.

Соединение с хэш-разделением: В отличие от двух описанных ранее планов параллельного выполнения соединения, план соединения с хэш-разделением не ограничивается конкретной схемой разделения базовых таблиц. Однако он применим только для эквисоединений. На рис. 3 показаны две базовых таблицы с одним и двумя разделами соответственно соединяются тремя параллельными процессами соединения. Вообще говоря, может использоваться произвольное число процессов соединения. В текущей версии NonStop SQL число процессов соединения равно числу ЦП в системе.

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


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