Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ? / 17 сообщений из 17, страница 1 из 1
05.05.2005, 19:51
    #33051541
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
база - 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
05.05.2005, 21:10
    #33051601
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
Может вот так получится :
Код: plaintext
1.
2.
SELECT (select Count(*) from ATH) +
  (select Count(*)  from ATH_OLD) AS TotalCount
...
Рейтинг: 0 / 0
06.05.2005, 10:14
    #33052033
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
_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
06.05.2005, 11:05
    #33052177
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
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
06.05.2005, 11:28
    #33052254
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
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
06.05.2005, 13:33
    #33052612
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
2_solo_
Бросьте эту затею с view. В ASE ими по возможности вообще не надо пользоваться.
...
Рейтинг: 0 / 0
06.05.2005, 13:41
    #33052642
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
Crip2_solo_
Бросьте эту затею с view. В ASE ими по возможности вообще не надо пользоваться.

Вам это известно, а для меня это стало открытием. А бросать не хочется. Мне отчеты строить надо. С UNION ALL во VIEW все получалось бы более менее красиво. а теперь мне страшно становиться как часто мне придеться перечечатывать одни и тебе условия по разным запросам. а про случай внесения изменений в условия вообще думать не хочется.
...
Рейтинг: 0 / 0
06.05.2005, 14:36
    #33052859
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
Это потому, что думать раньше надо было....
...
Рейтинг: 0 / 0
06.05.2005, 15:19
    #33053005
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
iLLerЭто потому, что думать раньше надо было....
а какието рациональные предложения от Вас поступят?
...
Рейтинг: 0 / 0
06.05.2005, 15:37
    #33053077
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
Каэшна будут. Все переделать. Пока не поздно, а даже если и поздно, все равно все переделать.
Потому как делать выборки из view по динамически накладываемым условиям - плохо. Оптимизатор может не справится с ходом Вашей мысли. Индексы-то на view не поставишь?! И не материализуешь как в Оракле, поэтому вьюшки лучше использовать уже как готовую выборку.
...
Рейтинг: 0 / 0
06.05.2005, 15:42
    #33053093
Alexander Dubrovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
_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
06.05.2005, 15:55
    #33053133
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
Странно, а в АСА union all как раз не устраняет дублирование строк...
...
Рейтинг: 0 / 0
06.05.2005, 16:02
    #33053153
Рыжий Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE непонятно зачем при UNION ALL использует временные таблицы, как это убрать ?
iLLerСтранно, а в АСА union all как раз не устраняет дублирование строк...

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

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


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