Посказки (хинты или hints) в запросах.
ALL_ROWS | Указание оптимизатору на быстрейшее выполнение всего запроса. Актуально для запросов из процедур(пакетов), для INSERT, UPDATE и DELETE |
AND_EQUAL | Используйте подсказку AND_EQUAL, когда в одной таблице существует
несколько критериев равенства. select /*+ AND_EQUAL(emp,PK_EMP,EMP_NAME) */ ename , dname from emp, dept where emp.deptno = dept.deptno and ename = 'SMITH' |
CACHE | Используйте подсказку CACHE для размещения всей таблицы в буферном кэше.
Таблица размещается в наиболее часто используемом конце буферного кэша.
Эта подсказка применима для небольших таблиц, к которым часто обращаются. select /*+ CACHE(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
CLUSTER | Используйте подсказку CLUSTER для доступа к таблице в кластере без использования
индекса. select /*+ CLUSTER(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
FIRST_ROWS | Указание оптимизатору на быстрейшее получение именно первых строк результата,
хотя в целом запрос может выполниться медленнее. Актуально для запросов из приложений, заполняющих в форме большие таблицы. |
FULL | Используйте подсказку FULL для выполнения полного просмотра таблицы. select /*+ FULL(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
HASH | Используйте подсказку HASH для доступа к таблице в хешированном кластере
без применения индекса. select /*+ HASH */ ename,dname from emp, dept where emp.deptno = dept.deptno |
INDEX | Используйте подсказку INDEX в качестве указания для Oracle по применению
одного из индексов, определенных в качестве параметров. select /*+ INDEX(emp,PK_EMP) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
INDEX_ASC | (по умолчанию) указывает просмотреть индекс в порядке возрастания |
INDEX_DESC | указывает просмотреть индекс в порядке убывания |
INDEX_COMBINE | INDEX_COMBINE вынуждает оптимизатор использовать битовые индексы. select /*+ INDEX_COMBINE(emp,ENAME) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
NOCACHE | Используйте подсказку NOCACHE для размещения блоков таблицы в начале буферного
кэша, чтобы они были меньше подвержены действию алгоритма вытеснения по давности использования. select /*+ NOCACHE(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
NOPARALLEL | Используйте подсказку NOPARALLEL для отмены применения нескольких серверных
процессов при обслуживании операций на указанной таблице. select /*+ NOPARALLEL(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
ORDERED | Используйте подсказку ORDERED для доступа к таблицам во фразе FROM в порядке
их указания. select /*+ ORDERED(emp,dept) */ ename,dname from emp, dept where emp.deptno - dept.deptno |
PARALLEL | Используйте подсказку PARALLEL, чтобы затребовать несколько серверных
процессов да! одновременного обслуживания операций на указанной таблице. select /*+ PARALLEL(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
PUSH_SUBQ | PUSH_SUBQ позволяет выполнить оценку подзапросов перед наложением фильтра. select /*+ PUSH_SUBQ */ ename,dname from emp, dept where emp.deptno in (select deptno from dept) |
ROWID | Используйте подсказку ROWID для доступа к таблице по ROWID. select /*+ ROWID(emp) */ ename,dname from emp, dept where emp.deptno = dept.deptno |
RULE | Указание использовать продукционный оптимизатор (по правилам). Не стыкуется с другими хинтам. Анализирует запрос с конца, т.е. ведущая таблица должна быть в конце перечня. select /*+ RULE */ ename, dname from emp, dept where emp.deptno=dept.deptno |
STAR | Подсказка STAR вызывает средство запроса STAR. select /*+ STAR */ ename, dname from emp, dept where emp.deptno=dept.deptno |
USE_CONCAT | USE CONCAT применяется, если в операторе SQL несколько критериев соединены оператором OR. select /*+ USE_CONCAT */ ename,dname from emp, dept where emp.deptno = dept.deptno |
USE_HASH | Используйте подсказку USE_HASH для выполнения хешированного соединения,
а не соединения слиянием или соединения вложенными циклами. select /*+ USE_HASH */ ename,dname from emp, dept where emp.deptno = dept.deptno |
USE_MERGE | Используйте подсказку USE_MERGE для выполнения соединения слиянием, а
не соединения вложенными циклами или хешированного соединения. select /*+ USE_MERGE */ ename,dname from emp, dept where emp.deptno = dept.deptno |
USE_NL | Используйте подсказку USE_NL для выполнения соединения вложенными циклами
Хорошие результаты дает комбинированное употребление хинтов ORDERED, USE_NL и, при необходимости, INDEX |