При выборе верхних строк используется неправильный индекс

У меня есть простой запрос, который выбирает первые 200 строк, упорядоченных по одному из столбцов, отфильтрованных по другому индексированному столбцу. Заблуждение состоит в том, почему план запроса в PL / SQL Developer показывает, что этот индекс используется только , когда я выбираю все строки, например:

SELECT * FROM
(
 SELECT *
 FROM cr_proposalsearch ps
 WHERE UPPER(ps.customerpostcode) like 'MK3%'
 ORDER BY ps.ProposalNumber DESC
)
WHERE ROWNUM <= 200

План показывает, что он использует индекс CR_PROPOSALSEARCH_I1, который является индекс в двух столбцах: PROPOSALNUMBER и UPPER (CUSTOMERNAME), для выполнения требуется 0,985 с : query with ROWNUM

Если я избавлюсь от условия ROWNUM, план будет таким, как я ожидал, и он будет выполнен в 0.343s : query without ROWNUM

Где индекс XIF25CR_PROPOSALSEARCH находится в CR_PROPOSALSEARCH (UPPER (CUSTOMERPOSTCODE));

Почему?

РЕДАКТИРОВАТЬ : Я собрал статистику по таблице cr_proposalsearch и по обоим планам запросов теперь покажем, что они используют индекс XIF25CR_PROPOSALSEARCH .

8
задан Грозный 2 August 2011 в 15:10
поделиться