Введение

Алгоритм, используемый в реляционных базах данных. Хэш-соединение является примером алгоритма соединения и используется в реализации реляционной системы управления базами данных. Все варианты алгоритмов хэш-соединения включают в себя построение хэш-таблиц из кортежей одного или обоих соединяемых отношений и последующий поиск в этих таблицах таким образом, чтобы для эквисоединений сравнивались только кортежи с одинаковым хэш-кодом. Хэш-соединения обычно более эффективны, чем соединения с вложенными циклами, за исключением случаев, когда просматриваемая таблица очень мала. Они требуют предиката эквисоединения (условия, сравнивающего записи из одной таблицы с записями из другой таблицы с использованием союза операторов равенства '=' по одному или нескольким столбцам).

Грейс Хаш присоединиться

Лучший подход известен как "grace hash join", названный в честь базы данных GRACE, для которой он был впервые реализован. Этот алгоритм позволяет избежать повторного сканирования всей таблицы, сначала разделяя обе таблицы с помощью хэш-функции и записывая эти разделы на диск. Затем алгоритм загружает пары разделов в память, строит хэш-таблицу для меньшей разделенной таблицы и просматривает другую таблицу на предмет совпадений с текущей хэш-таблицей. Поскольку разделы формируются на основе хэширования по ключу соединения, любая выходная кортежа соединения должна принадлежать одному и тому же разделу. Если один или несколько разделов все еще не помещаются в доступную память, алгоритм применяется рекурсивно: выбирается дополнительная ортогональная хэш-функция для разбиения большого раздела на подразделы, которые затем обрабатываются аналогичным образом. Поскольку это затратно, алгоритм стремится уменьшить вероятность этого, формируя как можно более мелкие разделы на начальном этапе разделения.

Хашиш против сустава

Хаш-соединения также могут быть использованы для оценки предиката анти-соединения (предиката, выбирающего значения из одной таблицы, когда соответствующие значения не найдены в другой). В зависимости от размеров таблиц могут применяться различные алгоритмы.

Хаш левый анти-соединение

Подготовьте хеш-таблицу для стороны NOT IN соединения. Просканируйте другую таблицу, выбирая строки, для которых хеш значения атрибута соединения соответствует пустой ячейке в хеш-таблице. Это более эффективно, когда таблица NOT IN меньше таблицы FROM.

Хеш-правый анти-соединение

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

Хаш левый полусоединенный

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

Хеш правый полусоединение

Подготовьте хеш-таблицу для стороны FROM соединения. Сканируйте таблицу IN, извлекая соответствующие записи из хеш-таблицы и удаляя их. Благодаря этому алгоритму каждая запись из хеш-таблицы (то есть таблицы FROM) может быть возвращена только один раз, так как она удаляется после возврата. Это более эффективно, когда таблица IN больше, чем таблица FROM.