|
|
|
I nformix Magazine Russian Edition Сентябрь 1998г.Инструменты оптимизации SQL-запросов к серверу INFORMIX Евгений Шкарбанов, Для оптимизации SQL-запросов к серверу БД можно использовать оператор SET OPTIMIZATION и директивы оптимизатора (начиная с версии 7.3x). Оператор SET OPTIMIZATION действует до окончания программы либо до следующего оператора SET OPTIMIZATION. Директивы оптимизатора воздействуют только на конкретный оператор SQL. Также появилась возможность выбирать несколько первых строчек, удовлетворяющих условию WHERE оператора SELECT, а не все, как раньше. Рассмотрим эти возможности подробнее. Оператор SET OPTIMIZATION Этот оператор может употребляться с четырьмя опциями HIGH, LOW, FIRST_ROWS, ALL_ROWS. Опции оптимизации плана запроса
Опции оптимизации цели запроса Начиная с версии 7.3 появились еще две опции FIRST_ROWS и ALL_ROWS. Эти опции относятся к оптимизации цели запроса:
Также можно указать цели конкретного запроса с помощью директив цели оптимизации. Оптимизация хранимых процедур Для хранимых процедур, которые остаются
неизменными или меняются незначительно, вы
можете выполнить оператор SET OPTIMIZATION HIGH во
время создания процедуры. Этот шаг запомнит
оптимальныхй план исполнения процедуры. Далее
надо выполнить оператор SET OPTIMIZATION LOW до
выполнения процедуры. Тогда при выполнении
процедура будет использовать оптимальный план
запроса и выполняться с наименьшими затратами. Директивы оптимизатора Новым инструментом в оптимизации исполнения запросов в сервере IDS начиная с версии 7.3x является механизм директив оптимизатора. Существуют пять видов директив:
По умолчанию директивы допустимы, но их можно отключить с помощью переменной среды IFX_DIRECTIVES или параметра DIRECTIVES в файле ONCONFIG. Директивы оптимизатора размещаются сразу после ключевого слова SELECT, DELETE или UPDATE в форме комментариев и воздействуют только на текущий оператор SQL. Нельзя использовать директивы оптимизатора в
распределенном запросе (содержащем хотя бы одну
удаленную таблицу) и в программе на ESQL/C для
оператора, где есть WHERE CURRENT OF. Директива порядка соединения Директива ORDERED указывает оптимизатору на необходимость производить соединения таблиц в порядке, указанном в списке FROM. Например, в операторе
сначала будет произодиться соединение dept и job, а потом с результатом будет сливаться emp. Директивы управления методом доступа Эти директивы указывают оптимизатору способ сканирования таблиц, указанных в запросе. В эту группу входят четыре директивы: INDEX, AVOID_INDEX, FULL, AVOID_FULL.
Пример использования директив управления методом доступа:
Директивы управления методом соединения Эти директивы указывают способ, использую который сервер будет соединять таблицы, указанные в запросе. В эту группу входят четыре директивы: USE_NL, AVOID_NL, USE_HASH, AVOID_HASH.
Если в директиве использования метода хэширования не указано никакой опции, оптимизатор использует затратный метод для определения роли таблицы. В следующем примере директива USE_HASH заставляет оптимизатор строить хэш-соединение для таблицы dept и рассматривать только хэш-соединение для соединения таблицы dept с другими таблицами. Поскольку больше никаких директив нет, оптимизатор выберет наилучший план для других соединений в запросе.
Этих директив всего две: ALL_ROWS и FIRST_ROWS. Эти директивы действуют также как и опции оптимизации цели запроса SET OPTIMIZATION ALL_ROWS и SET OPTIMIZATION FIRST_ROWS для конкретного оператора SQL. Пример употребления:
Директивы ALL_ROWS и FIRST_ROWS нельзя
употреблять в определении представлений (VIEW)
и в подзапросах. Директива перенаправления EXPLAIN Эта директива действует так же как и оператор SET
EXPLAIN ON, но только в рамках конкретного
оператора SQL. Эту директиву нельзя применять в
определении представлений и в подзапросах. Если
же до директивы был применен оператор SET EXPLAIN ON,
директива является избыточной. Можно
использовать эту директиву для тестирования и
отладки плана запроса. Новые возможности оператора SELECT Если мы не хотим использовать всю выборку, удовлетворяющюю условию WHERE в операторе SELECT, мы можем ее ограничить. В результате мы получим от сервера ровно столько строчек, сколько нам нужно. Например:
Ограничения:
|
|
Украинская баннерная сеть
|