изменение плана запроса при переходе к представлению
От: alk911  
Дата: 22.06.07 03:49
Оценка:
Работаю в среде Oracle 10iR2.

Создал представление "CREATE VIEW ...", с использованием многочисленных внешних соединений.
Если пытаться выполнять запрос select, который лежит в основе этого view, то план получается нормальный — таблицы соединяются в нужном порядке и результат правильный.
Однако при выполнение запроса select к этому view с теми же параметрами в блоке where, то план меняется, порядок соединения таблиц меняется и в результате пропадают некоторые строки, которые не пропали бы, если бы так же выполнялся тот же outer join, что и в предыдущем случае.


Так как объяснить специфику таблиц мне не представляется возможным (много их очень), то естественно обсуждать такой вопрос предметно вряд ли получится.
Может кто сталкивался подобными проблемами — "разстабилизацией" плана при переходе к представлениям?
Хоть подскажите где капнуть.
Заранее спасибо.
Re: изменение плана запроса при переходе к представлению
От: vvu07  
Дата: 22.06.07 06:15
Оценка:
Здравствуйте, alk911, Вы писали:

A>Работаю в среде Oracle 10iR2.


A>Создал представление "CREATE VIEW ...", с использованием многочисленных внешних соединений.

A>Если пытаться выполнять запрос select, который лежит в основе этого view, то план получается нормальный — таблицы соединяются в нужном порядке и результат правильный.
A>Однако при выполнение запроса select к этому view с теми же параметрами в блоке where, то план меняется, порядок соединения таблиц меняется и в результате пропадают некоторые строки, которые не пропали бы, если бы так же выполнялся тот же outer join, что и в предыдущем случае.


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

A>Может кто сталкивался подобными проблемами — "разстабилизацией" плана при переходе к представлениям?
A>Хоть подскажите где капнуть.
A>Заранее спасибо.

Если у тебя не явные соединения, то попробуй использовать явные. Читал, что оракловый оптимизатор их любит
Re: изменение плана запроса при переходе к представлению
От: MasterZiv СССР  
Дата: 26.06.07 08:27
Оценка:
alk911 пишет:
> Однако при выполнение запроса select к этому view с теми же параметрами
> в блоке where, то план меняется, порядок соединения таблиц меняется и в
> результате пропадают некоторые строки, которые не пропали бы, если бы
> так же выполнялся тот же outer join, что и в предыдущем случае.

Разные планы запросов на логику запросов влиять не должны.
План — это как выполнятеся запрос. А логика запроса — это сам запрос.
Если у тебя c VIEW и без него получаются разные результаты,
то это значит ты что-то напутал когда все это проделывал (если
конечно в славном оракуле нет соответствующего бага).

> Может кто сталкивался подобными проблемами — "разстабилизацией" плана

> при переходе к представлениям?

Это нормальное явление, запросы разные — планы разные, потому
что оптимизатор по-разному работает. Здесь ничего
плохого нет, главное чтобы планы получались хорошие.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.