каждая база данных может иметь собственную фактическую реализацию Hash Join . однако я бы сказал, что вероятный метод похож на this
Алгоритм Hash Join создает
хэш-таблица в памяти меньшего из
его два входа, а затем читает
больший ввод и зондирование в памяти
хеш-таблица для поиска совпадений, которые
записано на рабочий стол. Если
меньший вход не вписывается в
память, оператор хеширования
делит оба входа на меньшие
рабочие столы. Эти меньшие рабочие столы
обрабатываются рекурсивно, пока
меньший вход помещается в память.
По вопросу: is necessary to make a full table scan on the collumns
Я бы сказал, нет, это также зависит от базы данных и от того, насколько хорошо она может оптимизировать вещи. Если в запросе достаточно условий для ограничения строк в любой из этих таблиц, он извлечет эти строки, прежде чем использовать алгоритм слияния хешей.
Когда он строит in-memory hash table of the smaller of its two inputs
, он вытянет эти строки из таблицы, используя лучший метод, который не обязательно является сканированием таблицы. Если в запросе нет условий для уменьшения количества строк в этой таблице, он будет выполнять сканирование таблицы.
Когда then reads the larger input and probes the in-memory hash table to find matches
, он также вытянет эти строки, используя лучший метод, который не обязательно является сканированием таблицы.
если ваш запрос:
SELECT
*
FROM BigTable
INNER JOIN LittleTable ON BigTable.Col=LittleTable.Col
и используется хеш-соединение, оно, скорее всего, создаст хеш-таблицу в памяти из LittleTable, выполнив сканирование таблицы, а затем просмотрит таблицу BigTable, проверяя эти хеш-ключи.
если ваш запрос:
SELECT
*
FROM BigTable
INNER JOIN LittleTable ON BigTable.Col=LittleTable.Col
WHERE LittleTable.Col2 >'2010/01/01' AND LittleTable.Col2<'2010/01/31'
и используется хеш-соединение, оно, скорее всего, создаст хеш-таблицу в памяти из LittleTable, но не использует сканирование таблицы (если есть индекс для использования), а затем проверяет таблицу BigTable, проверяя эти хеш-ключи. Добавьте дополнительный фильтр, чтобы изменить удаление таблицы сканирования на BigTable.