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

Использование временных таблиц для промежуточных вычислений

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

 

Оптимизация группировки и сортировки

Если после группировки надо отсортировать результат, то желательно, чтобы поля сортировки и поля группировки перечислялись в одном порядке. Тогда после выполнения группировки результат будет уже отсортирован как надо (Суммарное время выполнения такого запроса уменьшается). Пример.

Исходный запрос:

select   LNAME          as LNAME,   FNAME          as FNAME,   max(BOOKCOUNT) as BOOKS from   READER group by   LNAME, FNAME order by   FNAME, LNAME;

Оптимизированный запрос:

select   LNAME          as LNAME,   FNAME          as FNAME,   max(BOOKCOUNT) as BOOKS from   READER group by   LNAME, FNAME order by   LNAME, FNAME;

Различные приемы оптимизации Перенос условий из having в where

Выражения, заданные в конструкции having, выполняются после группировки записей, а выражения, указанные в where, выполняются до группировки. Если возможно перенести выражения из having в where, то можно будет сократить время выполнения группировки. Пример.

Исходный запрос:

select   NAME       as BOOKNAME,   min(PYEAR) as PYEAR from   BOOK group by   NAME having   ID_AUTHOR > 2;

Оптимизированный запрос:

select   NAME       as BOOKNAME,   min(PYEAR) as PYEAR from   BOOK where   ID_AUTHOR > 2 group by   NAME;

Уменьшение размера поля, используемого для поиска по маске

Время поиска по маске прямо пропорционально зависит от размера поля. Если, например, размер поля уменьшить с 200 байт до 150 байт, то время поиска по маске по такому полю сократится на 25%.

Перенос изменений в постоянную часть

Если позволяет режим работы, то рекомендуется переносить изменения таблиц в постоянную часть (SQL-оператор pack table или SQL-функция packtable). Время выполнения запросов по таблице, имеющей небольшую переменную часть, меньше, чем по той же таблице с большой переменной частью.

Использование пакетных sql-операций вместо одиночных

Следует избегать одиночных операций, выполняемых в цикле, заменив их пакетными операциями. Пример.

Создать таблицу из 1024 случайных чисел:

if (table_exists('TEST') > 0)   drop TEST; create table TEST (   DATA dword ); var @i; @i = 0; while(@i < 1024) {   insert into TEST values(random(10));   @i = @i + 1; }

Оптимизированный запрос:

if (table_exists('TEST') > 0)   drop TEST; create table TEST (   DATA dword ); var @i; @i = 0; insert into TEST values(random(10)); while(@i < 10) {   fix all;     insert into TEST   select random(10, DATA) from TEST;     @i = @i + 1; }

4.11 Диагностика результатов выполнения sql запросов Работа с функциями обработки ошибок - функции lasthterr, lastsqlerr

Диагностика результатов выполнения SQL запросов сводится к работе с функциями обработки ошибок. Рассмотрим эти функции.

Функция lasthterr – Получить код последней ошибки HyTech

Функция возвращает код последней ошибки HyTech. При выполнении SQL-операторов для работы с базой данных код ошибки HyTech заносится во внутреннюю переменную. Этот код можно получить данной функцией и проанализировать. SQL-функции код ошибки возвращают сразу и не портят данную внутреннюю переменную. Поэтому их код ошибки нельзя получить данной функцией. Сбросить код ошибки можно с помощью SQL-функции clearerr.

Формат:

nCode = lasthterr();

Результат:

Тип

Значение

integer

Код последней ошибки HyTech.