Используются ли индексы, если предложение WHERE содержит неиндексированные столбцы - PullRequest
0 голосов
/ 06 июня 2018

Я использую таблицу со следующими индексами:

ind1 : column A,B,C,D
ind2 : column G
ind3 : column C
ind4 : column F
ind5 : column D
ind6 : column E

В своем запросе я использую следующие критерии выбора:

SELECT * FROM table WHERE
    A=a
AND B=b
AND C=c
AND D=d
AND E=e
AND F=f
AND H=h  (H does not have an index)  

Мой вопрос заключается в том,используются индексы таблицы, и, если производительность в этом запросе повышена, обратите внимание, что таблица содержит всего 12 столбцов и 32 млн записей.

1 Ответ

0 голосов
/ 06 июня 2018

Да, запрос почти наверняка будет использовать один из индексов, чтобы предварительно выбрать, какие строки могут заполнить хотя бы некоторые критерии.Чтобы проверить, верно ли условие WHERE для неиндексированных столбцов (например, для вашего столбца H), Oracle просто проверяет саму таблицу.Поскольку индекс указывает на правильное физическое расположение таблицы, это обычно довольно быстро.

Какой индекс используется, зависит от многих факторов, таких как размер таблицы, размер индекса, уникальность столбцов таблицы.уникальность индекса, распределение данных по значениям столбцов и т. д.

Чтобы узнать, какие индексы используются в вашем запросе, взгляните на план выполнения, который можно увидеть, например, в SQL Developer, нажав F10,

РЕДАКТИРОВАТЬ: По моему опыту, Oracle выбирает наиболее многообещающий индекс (который уменьшит количество строк больше всего), а затем проверяет все столбцы в предложении WHERE с помощью такой таблицы.

Пожалуйста, убедитесь, что статистика таблицы обновлена.Если вы сомневаетесь, проверьте с помощью

SELECT table_name, last_analyzed FROM USER_TABLES;

Если last_analyzed пусто или старая дата, пожалуйста, найдите DBMS_STATS.GATHER_TABLE_STATS, чтобы обновить статистику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...