{MS SQL} Выборка из view во временную таблицу
От: Ellin Россия www.rsdn.ru
Дата: 02.02.11 18:36
Оценка:
Натолкнулся в одной хранимке на выборку из view во временную таблицу и только потом эта временная таблица используются в основном запросе.
Попробовал в основном запросе использовать саму view, не используя таким образом избыточную временную таблицу. Работает — гораздо медленнее. Насколько
это типичная ситуация? И почему так происходит?
Re: {MS SQL} Выборка из view во временную таблицу
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 03.02.11 07:06
Оценка:
Здравствуйте, Ellin, Вы писали:

E>Натолкнулся в одной хранимке на выборку из view во временную таблицу и только потом эта временная таблица используются в основном запросе.

E>Попробовал в основном запросе использовать саму view, не используя таким образом избыточную временную таблицу. Работает — гораздо медленнее. Насколько
E>это типичная ситуация? И почему так происходит?

View — это же просто "отложенный запрос". По факту, если у вас в запросе используется view — то sql строит из view и вашего запроса один "мега-запрос", который может работать сколь угодно медленно (особенно если view используется в подзапросе). Решением может быть indexed view (что в принципе аналогично временной таблице)
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[2]: {MS SQL} Выборка из view во временную таблицу
От: Ellin Россия www.rsdn.ru
Дата: 03.02.11 07:22
Оценка:
Здравствуйте, Sshur, Вы писали:

S>View — это же просто "отложенный запрос". По факту, если у вас в запросе используется view — то sql строит из view и вашего запроса один "мега-запрос", который может работать сколь угодно медленно (особенно если view используется в подзапросе). Решением может быть indexed view (что в принципе аналогично временной таблице)

У меня во view используюься:
1. Синонимы
2. Таблицы из других баз. Поэтому indexed view не катит
Re[3]: {MS SQL} Выборка из view во временную таблицу
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 03.02.11 07:34
Оценка:
Здравствуйте, Ellin, Вы писали:

E>Здравствуйте, Sshur, Вы писали:


S>>View — это же просто "отложенный запрос". По факту, если у вас в запросе используется view — то sql строит из view и вашего запроса один "мега-запрос", который может работать сколь угодно медленно (особенно если view используется в подзапросе). Решением может быть indexed view (что в принципе аналогично временной таблице)

E>У меня во view используюься:
E>1. Синонимы
E>2. Таблицы из других баз. Поэтому indexed view не катит

А что за запрос? По идее, сильные тормоза должны наблюдаться только если к вью необходимо обратиться много раз, а запрос там тяжелый с агрегированием или большим количеством таблиц. Если вью просто джойнится с какими-то таблицами, то может наблюдаться наоборот ускорение за счет кэширования
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re: {MS SQL} Выборка из view во временную таблицу
От: MasterZiv СССР  
Дата: 03.02.11 09:08
Оценка:
On 02.02.2011 21:36, Ellin wrote:

> Натолкнулся в одной хранимке на выборку из view во временную таблицу и только

> потом эта временная таблица используются в основном запросе.
> Попробовал в основном запросе использовать саму view, не используя таким образом
> избыточную временную таблицу. Работает — гораздо медленнее. Насколько
> это типичная ситуация?

Это НЕ типичная ситуация. Это может происходить, а может и НЕ происходить,
как повезёт.

И почему так происходит?

В случае использования view в запросе он подставляется в запрос (не в
текстовом виде, конечно) и затем всё вместе оптимизируется оптимизатором.

Если всю view класть сначала во временную таблицу, а потом её использовать
в запросе, то получается два разных запроса
( 1- view --> #tmp, 2- select ... from #tmp ... )
которые СОВСЕМ ДРУГИЕ, как если бы был запрос
select ... from myview ...

которые ОТДЕЛЬНО оптимизирутся, имеют другие планы выполнения,
и отдельно выполняются.

Оптимизатор может генерировать планы похожей производительности,
а может и совсем разной, как повезёт. В общем случае никаких
закономерностей нет, всё зависит от конкретных запросов и
VIEW. Особенно от VIEW, они в этом плане бывают совершенно разные.
Есть VIEW абсолютно неоптимизируемые, их создание практически
бесполезно.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.