Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / with не создает временную физическую таблицу? / 3 сообщений из 3, страница 1 из 1
19.09.2008, 10:58
    #35548321
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
with не создает временную физическую таблицу?
Написал запрос
что то типа

Код: plaintext
1.
2.
3.
with tab as (...)
select ... from tab
union 
select ... from tab
И посмотрел план запроса. Стоимость увеличилась в 2 раза по сравнению если убрать union и второй запрос.
В доках (cookbook) написано что временная таблица инициализируется всякий раз как к ней кто то обращается.
Получается физически таблица не создается?

Если это так то как сделать так что бы инициализация происходила один раз?
...
Рейтинг: 0 / 0
19.09.2008, 13:26
    #35548890
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
with не создает временную физическую таблицу?
olzhasНаписал запрос
что то типа

Код: plaintext
1.
2.
3.
with tab as (...)
select ... from tab
union 
select ... from tab
И посмотрел план запроса. Стоимость увеличилась в 2 раза по сравнению если убрать union и второй запрос.
В доках (cookbook) написано что временная таблица инициализируется всякий раз как к ней кто то обращается.
Получается физически таблица не создается?

Если это так то как сделать так что бы инициализация происходила один раз?Непонятно, как можно сравнивать цены весьма разных запросов.
Вот запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t(tabname, colname
--, c
) as (
select tabname, colname 
--, case when 1=0 then cast(raise_error('75000', 'nonsense!') as int) else 0 end  
from syscat.columns where tabschema='SYSCAT'
) 
select * from (
select * from t 
  union  
select * from t 
) a
Сравните планы в этом случае, и в случае, если раскомментировать строки.
Грубо говоря, у оптимизатора есть выбор: либо просканировать 1 раз базовую таблицу и организовать темповую таблицу (оператор temp в плане запроса, не путать с темповой таблицей в with) для выполнения union, либо просканировать базовую таблицу 2-жды и сделать union.
В моем случае план запроса можно изменить искусственной вставкой вызова функции.
Оптимизатор каждый раз выбирает тот план, который ему покажется наименее затратным.
В моем случае можно заметить, что цена запроса этих весьма похожих запросов немного меньше у плана с двойным сканированием, чем у того, который сканирует 1 раз.
Т.е. оно подумало, что, мол, вызов функции какой-то есть - и лучше уж сделать темповую таблицу, чем в 2 раза больше сделать вызовов этой функции...
...
Рейтинг: 0 / 0
19.09.2008, 14:18
    #35549046
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
with не создает временную физическую таблицу?
Благодоря вашему примеру вроде разобрался в чем была загвоздка.
Дело в том что стоимость портовтоного сканирования временной таблицы равна стоимости создания + сканирования. Это видно из примера.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / with не создает временную физическую таблицу? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]