Да, запрос почти наверняка будет использовать один из индексов, чтобы предварительно выбрать, какие строки могут заполнить хотя бы некоторые критерии.Чтобы проверить, верно ли условие WHERE для неиндексированных столбцов (например, для вашего столбца H), Oracle просто проверяет саму таблицу.Поскольку индекс указывает на правильное физическое расположение таблицы, это обычно довольно быстро.
Какой индекс используется, зависит от многих факторов, таких как размер таблицы, размер индекса, уникальность столбцов таблицы.уникальность индекса, распределение данных по значениям столбцов и т. д.
Чтобы узнать, какие индексы используются в вашем запросе, взгляните на план выполнения, который можно увидеть, например, в SQL Developer, нажав F10,
РЕДАКТИРОВАТЬ: По моему опыту, Oracle выбирает наиболее многообещающий индекс (который уменьшит количество строк больше всего), а затем проверяет все столбцы в предложении WHERE
с помощью такой таблицы.
Пожалуйста, убедитесь, что статистика таблицы обновлена.Если вы сомневаетесь, проверьте с помощью
SELECT table_name, last_analyzed FROM USER_TABLES;
Если last_analyzed пусто или старая дата, пожалуйста, найдите DBMS_STATS.GATHER_TABLE_STATS, чтобы обновить статистику.