Oracle запрос с использованием «как» в столбце с индексированным числом, низкая производительность

В запросе 1 выполняется полное сканирование таблицы, даже если идентификатор является индексированным столбцом. Query 2 достигает того же результата, но гораздо быстрее. Если выполняется запрос 1, возвращающий индексированный столбец, он быстро возвращается, но если возвращаются неиндексированные столбцы или получается целая строка, запрос выполняется дольше.

В Query 3 он работает быстро, но столбецкод' является VARCHAR2 (10) вместо NUMBER (12) и индексируется так же, как и 'Я бы'.

Почему Query 1 не понимает, что он должен использовать индекс? Нужно ли что-то изменить, чтобы столбцы с индексированными числами работали быстрее?

[Запрос 1]

select a1.*
from people a1
where a1.id like '119%' 
and rownum < 5

Объяснить план

ВЫБЕРИТЕ ЗАЯВЛЕНИЕ ALL_ROWS

Стоимость: 67 Байт: 2,592 Количество элементов: 4

2 COUNT STOPKEY

1 СТОЛ ДОСТУП ПОЛНЫЙ СТОЛ людей

 Стоимость: 67 Байт: 3240 Количество элементов: 5

[Запрос 2]

select a1.*
from people a1, people a2
where a1.id = a2.id
and a2.id like '119%' 
and rownum < 5

Объяснить план

ВЫБЕРИТЕ ЗАЯВЛЕНИЕ ALL_ROWS

Стоимость: 11 Байт: 2620 Количество элементов: 4

5 COUNT STOPKEY

4 ТАБЛИЦА ДОСТУПА ПО ИНДЕКСУ РУДНЫЙ СТОЛ

Стоимость: 3 Байт: 648 Количество элементов: 1

3 вложенных цикла

Стоимость: 11 Байт: 2620 Количество элементов: 4

1 INDEX FAST FULL SCAN INDEX people_IDX3

Стоимость: 2 байта: 54 796 Количество элементов: 7 828

2 INDEX RANGE SCAN INDEX people_IDX3

Стоимость: 2 Количество элементов: 1

[Запрос 3]

select a1.*
from people a1
where a1.code like '119%' 
and rownum < 5

Объяснить план

ВЫБЕРИТЕ ЗАЯВЛЕНИЕ ALL_ROWS

Стоимость: 6 Байт: 1 296 Количество элементов: 2

3 COUNT STOPKEY

2 ТАБЛИЦА ДОСТУПА ПО ИНДЕКСУ РУДНЫЙ СТОЛ

Стоимость: 6 Байт: 1 296 Количество элементов: 2

1 INDEX RANGE SCAN INDEX people_IDX4

Стоимость: 3 Количество элементов: 2

Ответы на вопрос(5)

Ваш ответ на вопрос