10.1. Основные понятия
SQL и является высокоуровневым, логическим, оно не касается вопросов реализа-
ции. А второе относится именно к реализации, это — механизм непосредственного
выполнения соединения наборов строк. Принципиально важным является то, что за
один раз соединяются только два набора строк.
Существует три способа соединения: вложенный цикл (nested loop), хеширование
(hash join) и слияние (merge join). Они имеют свои особенности, которые PostgreSQL
учитывает при выполнении конкретных запросов.
Суть способа
«вложенный цикл» в том, что перебираются строки из «внешнего» на-
бора и для каждой из них выполняется поиск соответствующих строк во «внутрен-
нем» наборе. Если соответствующие строки найдены, то выполняется их соединение
со строкой из «внешнего» набора. При этом способы выбора строк из обоих наборов
могут быть различными. Метод поддерживает соединения как на основе равенства
значений атрибутов (эквисоединения), так и любые другие виды условий. Поскольку
он не требует подготовительных действий, то способен быстро приступить к непо-
средственной выдаче результата. Метод эффективен для небольших выборок.
При
соединении хешированием строки одного набора помещаются в хеш-таблицу,
содержащуюся в памяти, а строки из второго набора перебираются, и для каждой
из них проверяется наличие соответствующих строк в хеш-таблице. Ключом хеш-
таблицы является тот столбец, по которому выполняется соединение наборов строк.
Как правило, число строк в том наборе, на основе которого строится хеш-таблица,
меньше, чем во втором наборе. Это позволяет уменьшить ее размер и ускорить про-
цесс обращения к ней. Данный метод работает только при выполнении эквисоедине-
ний, поскольку для хеш-таблицы имеет смысл только проверка на равенство прове-
ряемого значения одному из ее ключей. Метод эффективен для больших выборок.
Достарыңызбен бөлісу: