Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Функции работы с кодификаторами

coder

Расшифровка значения по кодификатору.

coderfcode

Получение номера поля-кода для кодификатора.

coderfname

Получение номера поля-толкования для кодификатора.

coderkey

Получение из кодификатора кода по толкованию.

coderload

Загрузка кодификатора.

coderread

Получение толкования по порядковому номеру.

codersize

Получение размера кодификатора в записях.

coderunload

Выгрузка кодификатора из памяти (сервера).

4.9 Практические приемы и оптимизация sql запросов Навигационное соединение таблиц

Алгоритм соединения таблиц по умолчанию в HyTech работает следующим образом:

  • Считываются строки соединяемых таблиц;

  • Выполняется сортировка строк по столбцам, по которым требуется выполнить соединение таблиц;

  • Выполняется соединение методом последовательного сравнения отсортированных строк.

При выполнении запроса с операциями соединения таблиц часто более выгодно воспользоваться другим алгоритмом – алгоритмом навигационного соединения.

В отличие от алгоритма по умолчанию навигационное соединение таблиц позволяет последовательно прочитать строки одной таблицы (меньшей по размеру), а затем для каждой выбранной строки найти соответствующие строки другой таблицы (большей по размеру). Данный алгоритм имеет преимущества, если из больших таблиц в результате выбирается одна или несколько строк, что позволяет избежать в общем случае чтения большой таблицы целиком, а также операций сортировки.

При навигационном соединении таблиц не учитывается, какое соединение требуется, внешнее или внутреннее: всегда производится внешнее правое соединение.

Обычное правило для использования навигационного соединения: если из «главной» таблицы извлекается одна строка и строки из подчиненных таблиц равномерно связаны с записями из «главной» таблицы, то для такого запроса лучше применять режим навигационного соединения таблиц.

Режим соединения таблиц задается SQL-функцией relation.

Для демонстрации примера навигационного соединения наполним тестовыми данными две таблицы: BOOK и REPORT – при помощи следующего скрипта:

delete from BOOK; delete from REPORT; fix all; var @i = 0, @j = 1; while(@j <= 2) {   while(@i < 10)   {     insert into REPORT (ID_AUTHOR, NAME, PYEAR)     values (@j, 'test' + @i, 2000 + @j);     insert into BOOK (ID_AUTHOR, NAME, PYEAR)     values (@j, 'test' + @i, 2000 + @j);     inc(@i);   }   inc(@j);   @i = 0; }

Выберем статьи и книги, написанные Гоголем (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;

Заметим, что если в результате соединения для каждой строки главной таблицы выбирается много строк из больших таблиц, то включение режима навигационного соединения может значительно замедлить выполнения запроса.