Посказки (хинты или 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 |