Описание: Для каждой строки из первой таблицы ищет соответствующие строки во второй таблице.
Вызывается: Соединение таблиц без индексов или когда одна из таблиц очень маленькая.
Эффективность: Неэффективно для больших таблиц без индексов. Для оптимизации:
JOIN
на столбцах соединенияDISTINCT
, UNION
, сложные выражения в JOIN
)Описание: Создает хеш-таблицу из одной таблицы и использует её для поиска соответствий в другой таблице.
Вызывается: Соединение больших таблиц без индексов или когда условия соединения не могут использовать индексы.
Эффективность: Эффективен для соединения больших таблиц.
Описание: Обе таблицы сортируются по столбцам соединения, затем они проходят параллельно, находя совпадения.
Вызывается: Когда данные уже отсортированы по столбцам соединения или есть индексы, обеспечивающие сортировку.
Эффективность: Менее эффективен чем Hash Join
, но более эффективен если данные уже отсортированы.
Резюме
Nested Loop Join
плохо работает с большими таблицами, Hash Join
эффективен для неотсортированных данных, помещающихся в память. Merge Join
лучше для больших наборов данных, особенно если они уже отсортированы.
Все GIF-анимации взяты с сайта bertwagner.com