powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 15 и темповая таблица
15 сообщений из 15, страница 1 из 1
Sybase ASE 15 и темповая таблица
    #36110164
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация стандартна до безобразия.
Имеется некая таблица с ~100000 записей (TABLE). В таблице есть некий параметр (PARAM_REF) по которому необходимо сделать выборку. Дык вот запрос с Where

Select count(*) from TABLE Where PARAM_REF = @PARAM_REF


работает на порядок быстрее (т.е. порядка в 9-10 раз), чем запрос с джойном временной таблицы, в которой всего одно поле (PARAM_REF) и одно значение в таблице (=@PARAM_REF)

Select count(*) from TABLE T
join #TMP Tmp on T.PARAM_REF = Tmp.PARAM_REF

Замеры быстродействия производились только на результирующих запросах (т.е. бех учета создания временной таблицы, ее заполнения и т.п.)...

Приэтом. Полностью аналогичная структура на микрософтовском серваке таких разниц в работе не дает...

Вопрос: где собака зарыта? Куда копать? Есть необходимость делать темповую таблицу (так как в преспективе может быть выборка не по одному значению) но нет желания так терять производительность.
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110326
remedium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mikle83,
А если так:

SET FORCEPLAN ON
Select count(*) from #TMP Tmp
join TABLE T on T.PARAM_REF = Tmp.PARAM_REF
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110346
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут нужно план обоих запросов смотреть

А во временной таблицы записей много? Может надо индекс построить по этому полю во временной таблицы, или явно(forceplan) ее первой поставить!

Но без плана это только дагадки!
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110508
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
remedium пишет:

> SET FORCEPLAN ON
> Select count(*) from #TMP Tmp
> join TABLE T on T.PARAM_REF = Tmp.PARAM_REF

+1. Надо форсить план процентов на 80. И надо до этого
планы посмотреть.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110521
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83 пишет:
> Приэтом. Полностью аналогичная структура на микрософтовском серваке
> таких разниц в работе не дает...

MS -- другой сервер, там всё по-другому. Тут результат ожидаем.

>
> Вопрос: где собака зарыта? Куда копать? Есть необходимость делать

Планы давай. Запроса с параметром можно не давать, а запроса
со временной таблицей надо.

> темповую таблицу (так как в преспективе может быть выборка не по одному
> значению) но нет желания так терять производительность.

Будут другие запросы - будут другие проблемы и решения.
Разные запросы - разные подходы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110766
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenА во временной таблицы записей много? Может надо индекс построить по этому полю во временной таблицы, или явно(forceplan) ее первой поставить!
Но без плана это только дагадки!

Еще раз повторюсь - записей в таблице всего ОДНА. И она равна значению переменной.

Force Plan дал увеличение производительности но не сильно ощутимое (порядка 3-5%)

ПЛАН ЗАПРОСА БЕЗ ВРЕМЕННОЙ ТАБЛИЦЫ
|ROOT:EMIT Operator
|
| |SCALAR AGGREGATE Operator
| | Evaluate Ungrouped COUNT AGGREGATE.
| |
| | |SCAN Operator
| | | FROM TABLE
| | | Card_Order
| | | CO
| | | Using Clustered Index.
| | | Index : Card_Type
| | | Forward Scan.
| | | Positioning by key.
| | | Keys are:
| | | Card_Type_ID ASC
| | | Using I/O Size 2 Kbytes for data pages.
| | | With LRU Buffer Replacement Strategy for data pages.


ПЛАН ЗАПРОСА С ВРЕМЕННОЙ ТАБЛИЦЕЙ:

|ROOT:EMIT Operator
|
| |SCALAR AGGREGATE Operator
| | Evaluate Ungrouped COUNT AGGREGATE.
| |
| | |MERGE JOIN Operator (Join Type: Inner Join)
| | | Using Worktable2 for internal storage.
| | | Key Count: 1
| | | Key Ordering: ASC
| | |
| | | |RESTRICT Operator
| | | |
| | | | |SCAN Operator
| | | | | FROM TABLE
| | | | | Card_Order
| | | | | CO
| | | | | Table Scan.
| | | | | Forward Scan.
| | | | | Positioning at start of table.
| | | | | Using I/O Size 2 Kbytes for data pages.
| | | | | With LRU Buffer Replacement Strategy for data pages.
| | |
| | | |SORT Operator
| | | | Using Worktable1 for internal storage.
| | | |
| | | | |SCAN Operator
| | | | | FROM TABLE
| | | | | #Card_Type
| | | | | CT
| | | | | Table Scan.
| | | | | Forward Scan.
| | | | | Positioning at start of table.
| | | | | Using I/O Size 2 Kbytes for data pages.
| | | | | With LRU Buffer Replacement Strategy for data pages.


P.S. выдергивал через эмбаркодеру, так как родной интеркатив скул послал нафиг сказав, что ему чего-то не хватает, а времени разбираться нет
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110787
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас ошибочно MERGE JOIN используется для join. Как результат большая таблица в отсортированном порядке записывается во временную.

Установите цель оптимизации равную allrows_oltp и все будет быстренько.
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110806
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mikle83,

Ну неудивительно, у вас Table Scan!

индекс "Card_Type" по полю PARAM_REF сделан в таблице TABLE(Card_Order)?

а если так:
Select count(*) from TABLE T (index Card_Type)
join #TMP Tmp on T.PARAM_REF = Tmp.PARAM_REF
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110809
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morisУ вас ошибочно MERGE JOIN используется для join. Как результат большая таблица в отсортированном порядке записывается во временную.


Шаман однако! Спасибо помогло!
Вопрос такой - получается Sybase по умолчанию цепанул Merge Join...
Т.е. желательно все запросы просматривать по плану и если что явно корректировать?
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110828
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenMikle83,
Ну неудивительно, у вас Table Scan!
индекс "Card_Type" по полю PARAM_REF сделан в таблице TABLE(Card_Order)?

Само собой индекс есть.


cherrex_Den
а если так:
Select count(*) from TABLE T (index Card_Type)
join #TMP Tmp on T.PARAM_REF = Tmp.PARAM_REF
[/quot]
А вот так не пракатывает - ругается на некорректный синтаксис. В принципе проблема решилась вариантом, предложенным moris... Только вот теперь с сомнением смотрю на все остальные запросы/процедуры :)
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110840
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С синтаксимос разобрался - но работать стало даже чуть-чуть дольше...
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36110843
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83morisУ вас ошибочно MERGE JOIN используется для join. Как результат большая таблица в отсортированном порядке записывается во временную.


Шаман однако! Спасибо помогло!
Вопрос такой - получается Sybase по умолчанию цепанул Merge Join...
Т.е. желательно все запросы просматривать по плану и если что явно корректировать?

До версии 15.0.2 ASE 15ой ветки очень "оптимистично" расценивал стоимость Merge Join, как результат совал его где только возможно, особенно в режиме по умолчанию - allrows_mix
Если у вас ASE используется только как OLTP просто поставьте постоянно цель оптимизации
allrows_oltp
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36111196
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
moris пишет:

> До версии 15.0.2 ASE 15ой ветки очень "оптимистично" расценивал
> стоимость Merge Join, как результат совал его где только возможно,
> особенно в режиме по умолчанию - allrows_mix

что интересно, не ASE один такой. В MSSQL тоже в своё время было
то же самое -- переоценивался MERGE JOIN, (точнее недооценивался,
переоценивались его возможности).

И в других СУБД тоже.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36112704
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83
Select count(*) from TABLE Where PARAM_REF = @PARAM_REF

работает на порядок быстрее (т.е. порядка в 9-10 раз), чем запрос с джойном временной таблицы, в которой всего одно поле (PARAM_REF) и одно значение в таблице (=@PARAM_REF)

Select count(*) from TABLE T
join #TMP Tmp on T.PARAM_REF = Tmp.PARAM_REF

Замеры быстродействия производились только на результирующих запросах (т.е. бех учета создания временной таблицы, ее заполнения и т.п.)...


Такое же поведение запросто можно получить и на АСА в случае, когда не идентичные типы полей PARAM_REF в обоих таблицах. В этом случае идет неявное преобразование типов и отбрасывание индекса. Возможно, что мое предположение не подтвердится, но проверить стоит. Ведь ничего не бывает на этом свете просто так, раз АСЕ решил взять план такой, то что-то же его подтолкнуло на это...
...
Рейтинг: 0 / 0
Sybase ASE 15 и темповая таблица
    #36112830
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил - все связующие поля идентичны по типам (numeric(18))
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 15 и темповая таблица
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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