У меня есть запрос, который выглядит ниже, и таблицы A, T, S имеют около 1 миллиона строк, тогда как P имеет более 100 миллионов строк.Я недавно ввел встроенное представление "temp" в этот запрос, и это вызвало резкое снижение производительности.Данные, извлекаемые для temp, едва ли содержат 50 строк, и этот встроенный запрос выполняется в одно мгновение при выполнении в одиночку.
Статистика автотрассировки показывает огромный рост числа «последовательных получений» от 6-значного числа до введения временного числа в 9-значное число после добавления этого !!Кроме того, более 90% LAST_CR_BUFFER_GETS учитываются для «временного» представления.Если я извлекаю данные из этого представления во временную таблицу и использую эту таблицу как часть объединений, производительность будет очень хорошей, но это решение для меня не реально.
Я знаю, что вопрос очень обобщенный, но мне интересно, есть ли что-нибудь тривиально неправильное в использовании этого встроенного представления.Разве встроенные представления не дают такую же производительность, как при хранении этих данных во временной таблице?Можно ли как-нибудь намекнуть, чтобы Oracle использовал это представление эффективным образом и таким образом увеличил производительность.
select t.id,
a.date
from A a,
T t,
P p,
S s,
(select id
from S,
R
where s.id = r.id
and r.code = 10
r.code1 = 20
r.name = 'string1' ) temp
where ...cond1
...cond2
...cond2
s.id = temp.id