Sobes.tech
Назад к вопросам
Middle+
7

Какие виды физического соединения таблиц существуют (Hash Join, Merge Join, Nested Loop)?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Существует три основных вида физического соединения таблиц в СУБД:

  1. Nested Loop Join (Вложенный цикл)

    • Для каждой строки из первой таблицы (внешний цикл) происходит поиск соответствующих строк во второй таблице (внутренний цикл).
    • Эффективен при небольших объемах данных или когда одна из таблиц очень мала.
  2. Hash Join (Хеш-соединение)

    • На одной из таблиц строится хеш-таблица по ключу соединения.
    • Затем для каждой строки другой таблицы выполняется поиск в хеш-таблице.
    • Хорошо работает для больших таблиц без индексов.
  3. Merge Join (Сортированное соединение)

    • Обе таблицы предварительно сортируются по ключу соединения.
    • Затем происходит последовательное слияние отсортированных данных, сопоставляя строки с совпадающими ключами.
    • Эффективно при наличии отсортированных данных или индексов.

Пример использования в SQL-планах:

-- Nested Loop: когда одна таблица мала
SELECT * FROM small_table s JOIN big_table b ON s.id = b.id;

-- Hash Join: при отсутствии индексов и больших объемах
SELECT * FROM big_table1 t1 JOIN big_table2 t2 ON t1.key = t2.key;

-- Merge Join: когда обе таблицы отсортированы по ключу
SELECT * FROM sorted_table1 t1 JOIN sorted_table2 t2 ON t1.key = t2.key;

Выбор конкретного метода зависит от объема данных, наличия индексов и статистики таблиц.