У меня есть простой запрос, который выбирает первые 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 с :
Если я избавлюсь от условия ROWNUM, план будет таким, как я ожидал, и он будет выполнен в 0.343s :
Где индекс XIF25CR_PROPOSALSEARCH находится в CR_PROPOSALSEARCH (UPPER (CUSTOMERPOSTCODE));
Почему?
РЕДАКТИРОВАТЬ : Я собрал статистику по таблице cr_proposalsearch
и по обоим планам запросов теперь покажем, что они используют индекс XIF25CR_PROPOSALSEARCH
.