Доступные версии документации

Подсказка о сортировке по заданному индексу
Функция

Управление сортировкой записей в выборке данных соответственно указанному индексу без использования конструкции ORDER BY.

Спецификация
   
<подсказка сортировки по индексу>::=
Синтаксические правила
  1. Подсказка располагается перед перечислением имен выбираемых столбцов запроса на выборку данных.

  2. Подсказка применяется только для именованных индексов.

  3. Подсказка применяется только для одного индекса.

  4. Подсказки INDEX и INDEX_ASC эквивалентны.

Общие правила
  1. В случае невозможности произвести сортировку по указанному индексу подсказка игнорируется.

  2. Подсказка задает сортировку с использованием указанного индекса. Сортировка с подсказкой (с использованием индекса) в некоторых случаях будет выполняться быстрее, чем сортировка с помощью конструкции ORDER BY (например, в случае, когда выбираемые записи для результирующей выборки хранятся последовательно в нескольких блоках файла данных таблицы).

  3. В общем случае запросы с подсказками сортировки будут работать несколько медленнее, чем запросы без подсказок (несортированные) из-за дополнительной сортировки.

  4. Использование подсказки вместе с конструкцией ORDER BY бессмысленно, т.к. в этом случае будет проведена повторная сортировка.

  5. В ряде случаев подсказка будет игнорироваться (например, когда для обработки запроса ядру СУБД ЛИНТЕР требуется предварительная сортировка).

Пример
create or replace table test( id int, ident int );
create or replace table test1( id int, ident int );
insert into test( id, ident) values ( 1, 2 );
insert into test( id, ident) values ( 2, 3 );
insert into test( id, ident) values ( 3, 1 );
insert into test1( id, ident) values ( 1, 1 );
create index "AAA" on test(ident, id);
create or replace table test2( id2 int, ident2 int );
insert into test2( id2, ident2) values ( 1, 3 );
insert into test2( id2, ident2) values ( 2, 1 );
insert into test2( id2, ident2) values ( 3, 2 );
create index "AAA2" on test2(ident2, id2);

select /*+INDEX_DESC(system.test aaa)*/ * from test where ident is not null;
select /*+INDEX_DESC(system .test aaa)*/ a.id, a.ident from test a, test1 b where b.ident is not null;
select /*+INDEX_DESC(system.test aaa )*/ a.id, a.ident from test a, test1 b;
select /*+INDEX(system.test aaa)*/ * from test1 b, test a;
select /*+ INDEX(TEST AAA)*/* from test, test2 where id=id2;
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter