Работаю в среде Oracle 10iR2.
Создал представление "CREATE VIEW ...", с использованием многочисленных внешних соединений.
Если пытаться выполнять запрос select, который лежит в основе этого view, то план получается нормальный — таблицы соединяются в нужном порядке и результат правильный.
Однако при выполнение запроса select к этому view с теми же параметрами в блоке where, то план меняется, порядок соединения таблиц меняется и в результате пропадают некоторые строки, которые не пропали бы, если бы так же выполнялся тот же outer join, что и в предыдущем случае.
Так как объяснить специфику таблиц мне не представляется возможным (много их очень), то естественно обсуждать такой вопрос предметно вряд ли получится.
Может кто сталкивался подобными проблемами — "разстабилизацией" плана при переходе к представлениям?
Хоть подскажите где капнуть.
Заранее спасибо.
Здравствуйте, alk911, Вы писали:
A>Работаю в среде Oracle 10iR2.
A>Создал представление "CREATE VIEW ...", с использованием многочисленных внешних соединений.
A>Если пытаться выполнять запрос select, который лежит в основе этого view, то план получается нормальный — таблицы соединяются в нужном порядке и результат правильный.
A>Однако при выполнение запроса select к этому view с теми же параметрами в блоке where, то план меняется, порядок соединения таблиц меняется и в результате пропадают некоторые строки, которые не пропали бы, если бы так же выполнялся тот же outer join, что и в предыдущем случае.
A>Так как объяснить специфику таблиц мне не представляется возможным (много их очень), то естественно обсуждать такой вопрос предметно вряд ли получится.
A>Может кто сталкивался подобными проблемами — "разстабилизацией" плана при переходе к представлениям?
A>Хоть подскажите где капнуть.
A>Заранее спасибо.
Если у тебя не явные соединения, то попробуй использовать явные. Читал, что оракловый оптимизатор их любит
alk911 пишет:
> Однако при выполнение запроса select к этому view с теми же параметрами
> в блоке where, то план меняется, порядок соединения таблиц меняется и в
> результате пропадают некоторые строки, которые не пропали бы, если бы
> так же выполнялся тот же outer join, что и в предыдущем случае.
Разные планы запросов на логику запросов влиять не должны.
План — это как выполнятеся запрос. А логика запроса — это сам запрос.
Если у тебя c VIEW и без него получаются разные результаты,
то это значит ты что-то напутал когда все это проделывал (если
конечно в славном оракуле нет соответствующего бага).
> Может кто сталкивался подобными проблемами — "разстабилизацией" плана
> при переходе к представлениям?
Это нормальное явление, запросы разные — планы разные, потому
что оптимизатор по-разному работает. Здесь ничего
плохого нет, главное чтобы планы получались хорошие.
Posted via RSDN NNTP Server 2.1 beta