Может быть много причин , если индекс не используется. Даже после того, как вы укажете подсказки , есть вероятность, что оптимизатор Oracle сочтет иначе, а решит не использовать индекс . Вам нужно пройти через часть EXPLAIN PLAN и посмотреть, сколько стоит выписка с INDEX и без INDEX.
Предполагая, что Oracle использует CBO . Чаще всего, если оптимизатор считает, что стоимость с INDEX высока, даже если вы укажете ее в подсказках, оптимизатор будет игнорировать и продолжать полное сканирование таблицы. Ваше первое действие должно проверять DBA_INDEXES, чтобы знать, когда статистика LAST_ANALYZED. Если не проанализировано, вы можете установить таблицу, индекс для анализа .
begin
DBMS_STATS.GATHER_INDEX_STATS ( OWNNAME=>user
, INDNAME=>IndexName);
end;
Для таблицы.
begin
DBMS_STATS.GATHER_TABLE_STATS ( OWNNAME=>user
, TABNAME=>TableName);
end;
В крайних случаях вы можете попробовать настроить статистику самостоятельно.