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