Oracle использовать индекс подсказки для представления и принудительно переводить его в базовую таблицу - PullRequest
0 голосов
/ 12 февраля 2020

Как использовать подсказку в запросе к представлению, чтобы заставить Oracle использовать индекс для базовой таблицы?

Например,

Представление

select emp_id 
from v_employees 

базовая таблица

select emp_id /*+ INDEX(employees IDX_emp_id) */ 
from employees

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

select emp_id /*+ INDEX(v_employees employees IDX_emp_id) */
from v_employees

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Мы можем использовать глобальные подсказки для ссылки на таблицы внутри представлений. Имя представления вложено в имена таблиц или псевдонимы (если мы хотим получить доступ к индексам таблиц в подзапросах), используя ..

Итак, в вашем примере это будет:

select /*+ INDEX(v_employees.employees IDX_emp_id) */ emp_id 
from v_employees 

Обратите внимание, что подсказка приходит перед проекцией.

0 голосов
/ 12 февраля 2020

Согласно документации Oracle

Подсказки для оператора SQL можно отправлять оптимизатору, заключив их в комментарий в заявлении.

Блок в выражении может содержать только один комментарий, содержащий подсказки после ключевого слова SELECT, UPDATE, MERGE или DELETE.

SELECT /*+ hint [text] [hint[text]]... */ COLUMNS... FROM TABLE....

В таком случае используйте подсказку после SELECT ключевое слово.

select /*+ INDEX(employees IDX_emp_id) */ emp_id  from employees

Ура !!

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