Почему Oracle игнорирует индекс с ORDER BY?

Мое намерение состоит в том, чтобы получить постраничный набор результатов клиентов. Я использую этот алгоритм, изТом:

select * from (
  select /*+ FIRST_ROWS(20) */ FIRST_NAME, ROW_NUMBER() over (order by FIRST_NAME) RN
  from CUSTOMER C
)
where RN between 1 and 20
order by RN;

У меня также есть индекс, определенный для столбца "CUSTOMER". "FIRST_NAME":

CREATE INDEX CUSTOMER_FIRST_NAME_TEST ON CUSTOMER (FIRST_NAME ASC);

Запрос возвращает ожидаемый набор результатов, но из плана объяснения я заметил, что индекс не используется:

--------------------------------------------------------------------------------------
| Id  | Operation                 | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |          | 15467 |   679K|   157   (3)| 00:00:02 |
|   1 |  SORT ORDER BY            |          | 15467 |   679K|   157   (3)| 00:00:02 |
|*  2 |   VIEW                    |          | 15467 |   679K|   155   (2)| 00:00:02 |
|*  3 |    WINDOW SORT PUSHED RANK|          | 15467 |   151K|   155   (2)| 00:00:02 |
|   4 |     TABLE ACCESS FULL     | CUSTOMER | 15467 |   151K|   154   (1)| 00:00:02 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("RN">=1 AND "RN"<=20)
   3 - filter(ROW_NUMBER() OVER ( ORDER BY "FIRST_NAME")<=20)

Я использую Oracle 11g. Поскольку я просто запрашиваю первые 20 строк, упорядоченных по индексируемому столбцу, я ожидаю, что индекс будет использоваться.

Почему оптимизатор Oracle игнорирует индекс? Я предполагаю, что что-то не так с алгоритмом разбиения на страницы, но я не могу понять, что.

Благодарю.

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

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