Как я могу получить Oracle использовать индексы, когда мой взгляд содержит союз?
Вопрос
View1 это:
SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
INNER JOIN TBL5 ON view3.CODE = TBL5.CODE
Столбец C индексируется в исходных таблицах, и когда я выполняю либо из выбора операторов по отдельности, он использует индекс и возвращается во вспышке. Когда я использую представление об этом раз. Я находился под впечатлением, что Oracle переписал запросы против взглядов и использовали индексы, где полезны, а не делать SELECT * FROM VIEW1
А затем применяя предикаты после факта.
Что я делаю неправильно? Взгляды образец выше освещают проблему, но мои реальные взгляды каждый вступил в десятки таблиц, чтобы представление действительно необходимо.
Решение
Оптимизатор не знает, что будет ранее значение кода, когда он создает план выполнения, потому что вы идете против представления. Если вы находитесь в 11G, вы можете использовать подсказку оптимизатора Push_Pred, чтобы сделать его работать, как вы ожидаете.
Другие советы
Вы можете попробовать подсказку. Или убедитесь, что таблицы анализируются.
Еще одна мысль - может быть, сделайте метериальный вид?