Оптимизатор. Начальные понятия. Часть 3

dbstalker, 08 июля

Продолжим тему, начатую здесь и здесь.

Оптимизатор управляется параметром optimizer_mode, который можно задавать на уровне сессии или на уровне экземпляра. Он может принимать следующие значения:

RULE - RBO, используется оптимизация, основанная на анализе правил.

ALL_ROWS - CBO, используется оптимизация, основанная на анализе затрат для минимизации общего количества строк, обрабатываемых системой за единицу времени.

FIRST_ROWS - CBO, используется оптимизация, при которой из всех возможных оптимальных по стоимости планов выбирается тот, который наиболее быстро возвращает первые строки. То есть можно использовать, когда нужно свести к минимуму время между началом выполнения запроса и появлением результатов на экране (время реакции).

CHOOSE - при указании этого значения будет выбрана стоимостная оптимизация (CBO), основанная на анализе затрат. Если применение СВО невозможно (например, не собрана статистика по объектам), будет использована оптимизация, основанная на анализе правил.

FIRST_ROWS _1, FIRST_ROWS _10, FIRST_ROWS _1000 - при использовании first_rows Oracle вычисляет стоимость выполнения всего оператора, потом выбирает оптимальный план, при использовании first_rows_n вычисляет стоимость получения первых n строк, а стоимость выполнения всего оператора не вычисляется.

Пример:

alter session set optimizer_mode= first_rows;

Виды оптимизации могут быть заданы на уровне SQL-выражения.

Для этого используются ключевые слова методов доступа, которые можно увидеть ниже в таблице, или одно из выше указанных значений (CHOOSE, RULE, FIRST_ROWS, ALL_ROWS). При использовании этих подсказок в SQL-выражении ( кроме RULE) выбирается оптимизатор по стоимости.

Подсказка Описание
ROWID Использование идентификатора
CLUSTER Сканирование ключа кластера
HASH Сканирование хэш-индекса
INDEX Сканирование индекса
INDEX_ASC Сканирование индекса в порядке возрастания
INDEX_DESC Сканирование индекса в порядке убывания
INDEX_FFS Быстрое полное сканирование индекса
AND_EQUAL Использование нескольких индексов со слиянием результатов
FULL Полное сканирование таблицы

Замечания.

Подсказка FIRST_ROWS игнорируется для DELETE и UPDATE, и для SELECT, содержащего UNION, INTERSECT, MINUS, UNION ALL, GROUP BY, FOR UPDATE, DISTINCT или групповые функции. Это вызвано тем, что для выполнения таких запросов неявно производится сортировка и извлекается весь набор данных.

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

1 комментарий

Прокоментировать

Talifa
6 января 2012 г. в 15:21
 

Новый комментарий

Я не спамер: введите суму 4+6



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Нужен поставщик Дропшиппинг
10 декабря, 1 ответа
КИНО КАФЕ!!!!!!!!!!!!!!!!
10 декабря, 1 ответа