Управление оптимизацией выполнения запросов

В СУБД ЛИНТЕР оптимизация выполнения запросов осуществляется на двух уровнях:

  1. внутренний уровень – оптимизация выполнения запросов ядром СУБД на основе синтаксиса SQL-запроса. При использовании этого метода учитывается иерархическое старшинство операций. Если для какой-либо операции существует более одного пути ее выполнения, то выбирается тот путь, чей ранг выше, т.к. в большинстве случаев он выполняется быстрее, чем путь с более низким рангом;

  2. внешний уровень – с помощью подсказок программиста. Оптимизатор не может использовать индексный путь доступа, основываясь только на существовании индекса; путь доступа должен стать известным при обработке SQL-запроса. Для этого используется механизм «подсказок» (hints).

Подсказки могут располагаться как внутри текста запроса (между ключевыми словами и элементами выражений), так и в конце. Текст запроса не может начинаться с подсказки.

Допустимое местоположение подсказок:

select   count (*)  from auto /*+ NOCACHE */;
select /*+ NOCACHE */ count (*) from auto;
select count (*) from /*+ NOCACHE */ auto;
select count (* /*+ NOCACHE */ ) from auto;
select sysdate- /*+ NOCACHE */ 7;

Недопустимое местоположение подсказок:

/*+ NOCACHE */ Select   count (*)  from auto;
select cou /*+ NOCACHE */ nt (*) from auto;

Комментарий к подсказкам может быть как строковым ('--'), так и блочным ('/*, */'). Строковый комментарий исключает из выполнения только одну строку, перед которой стоит признак комментария, блочный комментарий исключает из выполнения целый блок команд, заключенный в указанную конструкцию.

 select * from t1, t2, t3, t4 where
 t1.id=t2.id -- +PREDORDER = 3
 and
 t3.value=t4.value /*+PREDORDER=2*/ and
 t2.id=t3.id /*+PREDORDER=4*/ and
 t3.id=t4.id /*+PREDORDER=1*/;