2014-01-22 3 views
0

Я новичок в настройке, и я стараюсь усердно изучать вещи, поскольку Oracle - это как океан. У меня есть запрос, построенный на представлениях, которые работают дольше. У меня есть вопрос:Как повысить производительность запроса на основе представления?

select t2.col1,t2.col2 
from vw_tab1 t1,vw_tab1 t2,tab3 t3 
where t1.col3=123 
and t2.col3<>123 
and t2.col4=t1.col5 
AND t3.col2=t2.col2; 

Мы используем однократное представление несколько раз в том же запросе. Проводит ли этот запрос дважды? Предложения очень ценятся. Я выполняю этот запрос в базе данных Oracle 11g single instance.

+1

Вы, кажется, скрещиваетесь с 't3', так как нет никакой ссылки на другую. Использование синтаксиса 'join' сделает этот mich clearer. –

+0

@ Alex Poole, есть еще одно соединение с t3, например t3.col2 = t2.col2. Кроме того, использование синтаксиса Join не улучшит производительность? – user3225011

+2

В тексте вашего заявления вы говорите, что используете один раз несколько раз. В запросе, который вы опубликовали, вы используете разные виды. Если вы также пропустили соединения, отредактируйте свой вопрос, чтобы добавить их. Использование синтаксиса SQL 99 не должно изменять производительность, если это не поможет вам определить, что вы опустили некоторые условия соединения. Для любого запроса на настройку, включая план запроса, будет очень полезно, так же как и информация о таких вещах, как количество строк в каждом объекте, насколько избирательны различные предикаты и т. Д. –

ответ

1

Да, таблицы, составляющие представление vw_tab1, будут запрашиваться дважды, один раз для каждого экземпляра (t1 и t2). Если вы собираетесь опубликовать план объяснения своего заявления, вы должны увидеть, что оракул запрашивает таблицы, составляющие представление, а не фактическое представление.

Смежные вопросы