Объединяет просмотры: проблемы с производительностью - PullRequest
3 голосов
/ 07 сентября 2010

С точки зрения производительности это то же самое, делая это:

select * from MYTABLEONE MT1
join MYVIEW MV on MT1.ID = MV.ID

( где вид

create view MYVIEW as
select MT2.*, MT3.*
from MYTABLETWO MT2
join MYTABLETHREE MT3 on MT2.OtherID = MT3.OtherID

)

Или лучше сделать это:

select MT1.*, MT2.*, MT3.*
from MYTABLEONE MT1
join MYTABLETWO MT2 on MT1.ID = MT2.ID
join MYTABLETHREE MT3 on MT2.OtherID = MT3.OtherID

Ответы [ 4 ]

4 голосов
/ 07 сентября 2010

Предполагая, что нет индексированного представления ...

Представление будет расширено как макрос, и должен быть сгенерирован тот же план.

Если представление не добавляет значения, если оно не используется повторно.Тем не менее, вы можете в конечном итоге получить представление присоединения для просмотра объединения, которое в развернутом виде дает гораздо более сложный план, чем ожидалось.

ИМХО, не используйте представление, если вы не знаете, что выделает.

3 голосов
/ 07 сентября 2010

Можно надеяться, что в этом прямом случае нет различий.

При работе с вложенными представлениями и представлениями, объединенными в представления, хотя всегда стоит проверять планы выполнения, чтобы это подтвердить.

Вот один пример случая, когда планы объединенных видов меньше, чем оптимальные.

Также могут быть проблемы с предикатом, нажимающим в представлениях

0 голосов
/ 07 сентября 2010

должно быть так же. Пожалуйста, все, начните доверять СУБД, чтобы быть умнее, чем они были 25 лет назад.

0 голосов
/ 07 сентября 2010

Если MYVIEW не является индексированным представлением, нет потерь или выигрышей в производительности.

Кроме того, легко сравнить два выбора, посмотрев на "оценочную стоимость поддерева" в Плане фактического выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...