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

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

Если это так то как сделать так что бы инициализация происходила один раз?
...
Рейтинг: 0 / 0
with не создает временную физическую таблицу?
    #35548890
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
with не создает временную физическую таблицу?
    #35549046
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодоря вашему примеру вроде разобрался в чем была загвоздка.
Дело в том что стоимость портовтоного сканирования временной таблицы равна стоимости создания + сканирования. Это видно из примера.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / with не создает временную физическую таблицу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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