Попробуйте выполнить запрос без именованных (bind) параметров.Иногда это имеет большое значение.
select * from messages m where m.status = 'P'
Может оказаться, что вам даже не нужен совет для запуска использования индекса.
Возможное объяснение состоит в том, что столбец содержит много одинаковыхзначения, например 90% строк, имеют status = 'D'
( столбец с низкой мощностью ).Теперь мы можем понять Oracle, почему он не использовал индекс :) Это просто не имеет смысла для значения 'D', но разумно для других значений.Я бы предпочел, чтобы Oracle рассмотрел мою подсказку ( Я знаю лучше ), но это кажется невозможным.
В общем, есть чрезвычайно полезное руководство Руководство по настройке Oracle SQL: индексигнорируется .Тем не менее, в нем не упоминается ситуация, когда пропуск параметра bind устраняет проблему.Вот почему я настаивал на том, чтобы задать вопрос о SO.