Алгоритм соединения таблиц по умолчанию в HyTech работает следующим образом:
· Считываются строки соединяемых таблиц;
· Выполняется сортировка строк по столбцам, по которым требуется выполнить соединение таблиц;
· Выполняется соединение методом последовательного сравнения отсортированных строк.
При выполнении запроса с операциями соединения таблиц часто более выгодно воспользоваться другим алгоритмом – алгоритмом навигационного соединения.
В отличие от алгоритма по умолчанию навигационное соединение таблиц позволяет последовательно прочитать строки одной таблицы (меньшей по размеру), а затем для каждой выбранной строки найти соответствующие строки другой таблицы (большей по размеру). Данный алгоритм имеет преимущества, если из больших таблиц в результате выбирается одна или несколько строк, что позволяет избежать в общем случае чтения большой таблицы целиком, а также операций сортировки.
При навигационном соединении таблиц не учитывается, какое соединение требуется, внешнее или внутреннее: всегда производится внешнее правое соединение.
Обычное правило для использования навигационного соединения: если из «главной» таблицы извлекается одна строка и строки из подчиненных таблиц равномерно связаны с записями из «главной» таблицы, то для такого запроса лучше применять режим навигационного соединения таблиц.
Режим соединения таблиц задается SQL-функцией relation.
Для демонстрации примера навигационного соединения наполним тестовыми данными две таблицы: BOOK и REPORT – при помощи следующего скрипта:
Выберем статьи и книги, написанные Гоголем (ID = 1) в режиме навигационного соединения:
fix all; relation(1);
select r.NAME as RNAME, b.NAME as BNAME, a.LNAME as ANAME from AUTHOR a, REPORT r, BOOK b where a.LNAME = 'Гоголь' and b.ID_AUTHOR = r.ID_AUTHOR and r.ID_AUTHOR = a.ID;
Заметим, что если в результате соединения для каждой строки главной таблицы выбирается много строк из больших таблиц, то включение режима навигационного соединения может значительно замедлить выполнения запроса.