powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
17 сообщений из 17, страница 1 из 1
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33051541
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
база - ASE 12.5.3

select вида

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create view test_union as 
   select * from ATH 
       union all 
   select * from ATH_OLD
go

select count(*) from test_union 

выполняется в разы медленнее чем 2 отдельных count(*) по каждой из таблиц

план запроса показал что данные вначале загоняются во временную таблицу и только потом делается агрегация. Как заставить сай выполнять такие запросы без участия временной таблицы.... в АСА, Оракле, Фарберде такой запрос выполняется без каких либо усилий.

плн запроса который выдал мне ASE следущий
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            ( store Worktab1 
		( union 
			( t_scan ( table ( ATH) ) ) 
			( t_scan ( table ( ATH_OLD ) ) ) 
		) 
	) 
	( plan 
		( t_scan ( work_t Worktab1 ) ) 
		( ) 
	) 
Table: ATH scan count 1, logical reads: (regular=324 apf=0 total=324), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 
Table: ATH_OLD scan count 1, logical reads: (regular=324 apf=0 total=324), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 
Table: Worktable1  scan count 1, logical reads: (regular=5250 apf=0 total=5250), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 

^^^^^^ последняя строчка самая затратная и асолютно ненужная для агрегации по union all.

Подскажите плиз как избежать использования временной таблицы???
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33051601
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вот так получится :
Код: plaintext
1.
2.
SELECT (select Count(*) from ATH) +
  (select Count(*)  from ATH_OLD) AS TotalCount
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33052033
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_solo_
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create view test_union as 
   select * from ATH 
       union all 
   select * from ATH_OLD
go

select count(*) from test_union 

выполняется в разы медленнее чем 2 отдельных count(*) по каждой из таблиц

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



Для этого надо отказаться от использования таких VIEW.
При работе с такими VIEW, т.е. со сложными VIEW, ASE будет всегда использовать стратегию материализации VIEW, т.е. формирования физического образа VIEW во временной таблице.

Для реализации конкретно вот этого ASE скоро планирует сделать аналог partitioned tables Оракла - это должно быть в следующем релизе.

_solo_
в АСА, Оракле, Фарберде такой запрос выполняется без каких либо усилий.


Сомневаюсь...
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33052177
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Сомневаюсь...
Разбиваем сомнения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE VIEW _Test
AS
  SELECT Flat_id
  FROM Flat
  UNION ALL
  SELECT Flat_id
  FROM FlatList;

SELECT Count(*)
FROM _Test;
План:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
( Plan [ Total Cost Estimate: . 08658  ] 
  ( SingleRowGroupBy
    ( UnionAll
      ( TableScan Flat )
      ( TableScan FlatList )
    )
  )
)
никаких WorkTable - сканим и тут же считаем сразу для обеих таблиц - все как полагается в приличном оптимизаторе :)
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33052254
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСомневаюсь...
сомневаться или нет ваше личное дело :) проверьте и отбросте свои сомнения. Я проверил такие селекты на базах
Firebird 1.5.0.4306 , Oracle 9.2.0.5.0, ASA 8.0.2.3601

- время и затраты на выполнение двух отдельных агрегаций практически равны агрегации по юниону.

MasterZiv
Для этого надо отказаться от использования таких VIEW.
При работе с такими VIEW, т.е. со сложными VIEW, ASE будет всегда использовать стратегию материализации VIEW, т.е. формирования физического образа VIEW во временной таблице.

Для реализации конкретно вот этого ASE скоро планирует сделать аналог partitioned tables Оракла - это должно быть в следующем релизе.

но мне _не нужен_ аналог _партишин_ из оракала в моем запросе(хотя и не помешалобы). У меня в запросе таблицы отличаются, у них есть общие колонки но есть и дополнительная информация специфическая для каждой из таблиц. Секционирование в чистом виде тут не проходит, таблицы похожи но не идентичны.
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33052612
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2_solo_
Бросьте эту затею с view. В ASE ими по возможности вообще не надо пользоваться.
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33052642
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip2_solo_
Бросьте эту затею с view. В ASE ими по возможности вообще не надо пользоваться.

Вам это известно, а для меня это стало открытием. А бросать не хочется. Мне отчеты строить надо. С UNION ALL во VIEW все получалось бы более менее красиво. а теперь мне страшно становиться как часто мне придеться перечечатывать одни и тебе условия по разным запросам. а про случай внесения изменений в условия вообще думать не хочется.
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33052859
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это потому, что думать раньше надо было....
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053005
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerЭто потому, что думать раньше надо было....
а какието рациональные предложения от Вас поступят?
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053077
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каэшна будут. Все переделать. Пока не поздно, а даже если и поздно, все равно все переделать.
Потому как делать выборки из view по динамически накладываемым условиям - плохо. Оптимизатор может не справится с ходом Вашей мысли. Индексы-то на view не поставишь?! И не материализуешь как в Оракле, поэтому вьюшки лучше использовать уже как готовую выборку.
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053093
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_solo_база - ASE 12.5.3

select вида

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create view test_union as 
   select * from ATH 
       union all 
   select * from ATH_OLD
go

select count(*) from test_union 
^^^^^^ последняя строчка самая затратная и асолютно ненужная для агрегации по union all.

Подскажите плиз как избежать использования временной таблицы???

Почему ненужная?
Union all устраняет дублирование записей.
Составляется единый рекордсет и потом по сути сортируется и фильтруется.
Можно попытаться сделать так:
Код: plaintext
1.
2.
3.
4.
5.
select * from ATH
union
select * 
from ATH_OLD o
where not exists ( select  1  from ATH a where a.id = o.id)
Ну если есть конечно однозначные идентификаторы строк.
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053133
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, а в АСА union all как раз не устраняет дублирование строк...
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053153
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerСтранно, а в АСА union all как раз не устраняет дублирование строк...

BOLselect-statement
UNION [ ALL | DISTINCT ] select-statement
[ UNION [ ALL | DISTINCT ] select-statement ] ...
[ ORDER BY integer [ ASC | DESC ], ... ]
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053155
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори, не въехал :)
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053159
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerСтранно, а в АСА union all как раз не устраняет дублирование строк...
Эээ.
Может я стормозил...
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053164
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerСтранно, а в АСА union all как раз не устраняет дублирование строк...
Я тормоз.
Да действительно все перепутал.
Тогда правда неясно для чего временные таблицы.
...
Рейтинг: 0 / 0
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
    #33053181
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer Оптимизатор может не справится с ходом Вашей мысли. Индексы-то на view не поставишь?! И не материализуешь как в Оракле, поэтому вьюшки лучше использовать уже как готовую выборку.

да нормально справляется оптимизатор с индексами. Надо только вовремя статистику обновлять, в крайнем случае можно в конце запроса внаглую план запроса прицепить чтоб вообще проигнорировать на оптимизатор самого сайбеса. в том числе план будет планировать и саму вьюшку входящую в запрос.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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