powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как ускорить?
43 сообщений из 43, показаны все 2 страниц
Как ускорить?
    #34306373
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть апдейт (это расчет рыночной стоимости)
update tr_bill_in_portfolio
set rate = convert(decimal(30,10),(select sum(isnull(#rate_by_day.rate,0)*tmp_bill_in_qty_by_day.qty)
from tmp_bill_in_qty_by_day,
#rate_by_day
where tmp_bill_in_qty_by_day.sub_id=tr_bill_in_portfolio.subacc_id
and tmp_bill_in_qty_by_day.stock_id=tr_bill_in_portfolio.stock_id
and #rate_by_day.stock_id=tmp_bill_in_qty_by_day.stock_id
and #rate_by_day.day=tmp_bill_in_qty_by_day.day

)/ @days)
where id=@id
and tr_bill_in_portfolio.place_id=@tmp_com_id

Наблюдаются страшнейшие тормоза...конечно тут играет роль большой объем таблиц ,например tmp_bill_in_qty_by_day около 900000 записей,#rate_by_day около 200000... В частости дико тормозит не только выборка данных, но и конвертация в децимал.
Может можно что-то сделать с этим?
...
Рейтинг: 0 / 0
Как ускорить?
    #34306459
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть вот такие индексы
id subacc_id stock_id place_id id,place_id,act_acc_id id, place_id, subacc_id, stock_id
...
Рейтинг: 0 / 0
Как ускорить?
    #34306717
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Че индексы... ты план запроса покажи...
set showplan on
set noexec on
и прогони свой запрос...

И покажи DDL этих таблиц и индексов...
...
Рейтинг: 0 / 0
Как ускорить?
    #34306796
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmo пишет:

> Наблюдаются страшнейшие тормоза...конечно тут играет роль большой объем
> таблиц ,например tmp_bill_in_qty_by_day около 900000
> записей,#rate_by_day около 200000... В частости дико тормозит не только
> выборка данных, но и конвертация в децимал.

Конвертация в децимал вас не должна волновать вообще. Вас должен
волновать план запроса. Конвертация в децимал будет в любом случае
занимать много меньше времени чем обработка одной записи.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34306824
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create table #accounts (
id numeric,
bill_sum decimal(30,10),
bill_price decimal(30,10) null
)

create table #days (day datetime)

create table #qty_by_day (
stock_id numeric,
sub_id numeric,
day datetime,
qty decimal(30,10)
)

create table #rate_by_day
(
day datetime,
stock_id numeric,
rate decimal(30,10) null,
max_day datetime null,
min_day datetime null
)

create table #tmp_days(day datetime)
--------------------------------------------------------
print 'tr_bill_in_portfolio'
SETUSER 'dbo'
go

create table dbo.tr_bill_in_portfolio (
id numeric(18, 0) not null,
subacc_id numeric(18, 0) not null,
stock_id numeric(18, 0) not null,
qty decimal(30, 10) not null,
rate decimal(30, 10) null,
bill_sum decimal(30, 10) null,
place_id numeric(18, 0) null,
act_acc_id numeric(18, 0) null
)
lock datapages
on 'default'
go

print 'tr_bill_in_portfolio_01'
create nonclustered index tr_bill_in_portfolio_01
on dbo.tr_bill_in_portfolio (id)
on 'default'
go

print 'tr_bill_in_portfolio_02'
create nonclustered index tr_bill_in_portfolio_02
on dbo.tr_bill_in_portfolio (subacc_id)
on 'default'
go

print 'tr_bill_in_portfolio_03'
create nonclustered index tr_bill_in_portfolio_03
on dbo.tr_bill_in_portfolio (stock_id)
on 'default'
go

print 'tr_bill_in_portfolio_04'
create nonclustered index tr_bill_in_portfolio_04
on dbo.tr_bill_in_portfolio (place_id)
on 'default'
go

print 'tr_bill_in_portfolio_05'
create nonclustered index tr_bill_in_portfolio_05
on dbo.tr_bill_in_portfolio (id, place_id, act_acc_id)
on 'default'
go

print 'tr_bill_in_portfolio_06'
create nonclustered index tr_bill_in_portfolio_06
on dbo.tr_bill_in_portfolio (id, place_id, subacc_id, stock_id)
on 'default'
go

SETUSER
go
-----------------------------------------------

update tr_bill_in_portfolio
set rate = convert(decimal(30,10),(select sum(isnull(#rate_by_day.rate,0)*#qty_by_day.qty)
from #qty_by_day,
#rate_by_day
where #qty_by_day.sub_id=tr_bill_in_portfolio.subacc_id
and #qty_by_day.stock_id=tr_bill_in_portfolio.stock_id
and #rate_by_day.day=#qty_by_day.day
and #rate_by_day.stock_id=#qty_by_day.stock_id

)/ @days)
where id=@id
and tr_bill_in_portfolio.place_id=@tmp_com_id
...
Рейтинг: 0 / 0
Как ускорить?
    #34306982
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
План
---------------------
QUERY PLAN FOR STATEMENT 245 (at line 1035).




STEP 1
The type of query is UPDATE.
The update mode is direct.


FROM TABLE
tr_bill_in_portfolio
Nested iteration.
Index : tr_bill_in_portfolio_05
Forward scan.
Positioning by key.
Keys are:
id ASC
place_id ASC


Run subquery 1 (at nesting level 1).
Using I/O Size 4 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
Using I/O Size 4 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.
TO TABLE
tr_bill_in_portfolio


NESTING LEVEL 1 SUBQUERIES FOR STATEMENT 245.


QUERY PLAN FOR SUBQUERY 1 (at nesting level 1 and at line 1036).


Correlated Subquery.
Subquery under an EXPRESSION predicate.




STEP 1
The type of query is SELECT.
Evaluate Ungrouped SUM OR AVERAGE AGGREGATE.


FROM TABLE
#qty_by_day
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 4 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


FROM TABLE
#rate_by_day
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 4 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


END OF QUERY PLAN FOR SUBQUERY 1.
...
Рейтинг: 0 / 0
Как ускорить?
    #34307037
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В начале поста запрос немного другой.
Смотреть на этот;)

update tr_bill_in_portfolio
set rate = convert(decimal(30,10),(select sum(isnull(#rate_by_day.rate,0)*#qty_by_day.qty)
from #qty_by_day,
#rate_by_day
where #qty_by_day.sub_id=tr_bill_in_portfolio.subacc_id
and #qty_by_day.stock_id=tr_bill_in_portfolio.stock_id
and #rate_by_day.day=#qty_by_day.day
and #rate_by_day.stock_id=#qty_by_day.stock_id

)/ @days)
where id=@id
and tr_bill_in_portfolio.place_id=@tmp_com_id
...
Рейтинг: 0 / 0
Как ускорить?
    #34307054
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmo пишет:

> FROM TABLE
> #qty_by_day
> Nested iteration.
> Table Scan.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Forward scan.
> Positioning at start of table.
> Using I/O Size 4 Kbytes for data pages.
> With LRU Buffer Replacement Strategy for data pages.
>
>
> FROM TABLE
> #rate_by_day
> Nested iteration.
> Table Scan.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Forward scan.
> Positioning at start of table.
> Using I/O Size 4 Kbytes for data pages.
> With LRU Buffer Replacement Strategy for data pages.

Вот если от этих table scan-ов избавитесь, то будет вам счастье
процентов на 95. Избавляться надо путем добавления индексов (если нет еще)
на условия JOIN-ов и корреляции и проставления в запрос хинтов
INDEX с ними.

Запрос после этого надо тщательно тестировать с проверкой плана и IO.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34307067
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Вот если от этих table scan-ов избавитесь, то будет вам счастье
процентов на 95. Избавляться надо путем добавления индексов (если нет еще)
на условия JOIN-ов и корреляции и проставления в запрос хинтов
INDEX с ними.


это зависит от размера временных таблиц...
вполне возможно, что при малом количестве записей в них индексы счастья не принесут :)

MasterZiv
Запрос после этого надо тщательно тестировать с проверкой плана и IO.

это да, без этого никуда.
...
Рейтинг: 0 / 0
Как ускорить?
    #34307167
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблицы здоровенные
...
Рейтинг: 0 / 0
Как ускорить?
    #34307231
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasmoТаблицы здоровенные
ну тогда MasterZiv прав

надо избавляться от table scan
замерьте сколько по времени у вас будут рисоваться необходимые индексы по этим #-таблицам
если этот overhead вас устроит, то рисуйте индексы после заполнения этих таблиц
иначе - переписывать/модифицировать логику запроса/процедуры...
...
Рейтинг: 0 / 0
Как ускорить?
    #34307266
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad пишет:

> это зависит от размера временных таблиц...
> вполне возможно, что при малом количестве записей в них индексы счастья
> не принесут :)

Согласен на все 100%. Однако аффтар уже написал что по крайней мере
одна таблица имеет около 1M строк.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34307277
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad пишет:
> если этот overhead вас устроит, то рисуйте индексы после заполнения этих
> таблиц

Кстати если так делать, то индексы могут подхватиться оптимизатором
и без хинтов. Одна из техник работы с индексами на временных
таблицах заключается в создании индексов ПОСЛЕ заполнения временной таблицы.
Тогда оптимизатор будет уже знать статистику по полям индекса и будет
ее учитывать. Но это не на всех версиях ASE.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34307301
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем почти наверняка придется фиксировать хинтами индексы на временные таблицы, или еще лучше сначала залить данные во временные таблицы, потом создать индексы, а в другом батче или процедуре уже использовать это богатство, дабы облегчить жизнь оптимизатору...
...
Рейтинг: 0 / 0
Как ускорить?
    #34307357
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE 12.0
...
Рейтинг: 0 / 0
Как ускорить?
    #34307625
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть только одна проблема. Вроде бы ASE 12.0 не будет использовать индексы в процедуре на временные таблицы.
т.е в таком случае индекс на временную таблицу просто лишняя трата времени
...
Рейтинг: 0 / 0
Как ускорить?
    #34307629
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А делать не временные как-то не очень хочется...
...
Рейтинг: 0 / 0
Как ускорить?
    #34308575
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал таблицы не временными... теперь переполняется лог при инсерте...
...
Рейтинг: 0 / 0
Как ускорить?
    #34308676
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasmoСделал таблицы не временными... теперь переполняется лог при инсерте...
вставлять батчами, по нескольку десятков тысяч, а не "одним селектом всё"
...
Рейтинг: 0 / 0
Как ускорить?
    #34308681
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad FantasmoСделал таблицы не временными... теперь переполняется лог при инсерте...
вставлять батчами, по нескольку десятков тысяч, а не "одним селектом всё"
где созданы "невременные" таблицы? в боевой базе или tempdb ?
...
Рейтинг: 0 / 0
Как ускорить?
    #34308718
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в боевой
а как батчами?
как ограничить выборку?
...
Рейтинг: 0 / 0
Как ускорить?
    #34308746
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmoв боевой
а как батчами?
как ограничить выборку?
1) попробуй в tempdb
2 и 3) используя set rowcount N (отключается: set rowcount 0 ) или в цикле, опираясь на уникальные идентификаторы вносимых записей
...
Рейтинг: 0 / 0
Как ускорить?
    #34309806
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmo пишет:
> Есть только одна проблема. Вроде бы ASE 12.0 не будет использовать
> индексы в процедуре на временные таблицы.
> т.е в таком случае индекс на временную таблицу просто лишняя трата времени

Я думаю что это голословное заявление. Вообще про оптимизатор не стоит
говорить чего-то определенного. Хотя фраза "Вроде бы" немного исправляет дело...

Короче, в 11.9 замечательно в процедурах использовались индексы на временные
таблицы. Почему бы им не быть использоваными в 12.0 ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34309809
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmo пишет:
> Сделал таблицы не временными... теперь переполняется лог при инсерте...

Э ... Я что-то пропустил ? А зачем это ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34310062
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Я думаю что это голословное заявление. Вообще про оптимизатор не стоит
говорить чего-то определенного. Хотя фраза "Вроде бы" немного исправляет дело...


Видимо имелось ввиду утверждение, что если имеется последовательность действий - создаются временные таблицы, создаются индексы, заливаются данные и тут же начинается с ними работа, то оптимизатор не учитывает реальное состояние дел с временными таблицами.
Поэтому Sybase рекомендует следующую последовательность действий
- создаются временные таблицы
- заливаются данные
- создаются индексы
- зовется внутренняя ХП, которая уже и обрабатывает эти данные...

Но всегда остается возможность выкрутить оптимизатору руки :))
...
Рейтинг: 0 / 0
Как ускорить?
    #34310571
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лень пишет:

> Поэтому Sybase рекомендует следующую последовательность действий
> - создаются временные таблицы
> - заливаются данные
> - создаются индексы
Этого уже достаточно.

> - зовется внутренняя ХП, которая уже и обрабатывает эти данные...

Не обязательно звать внутреннюю ХП. И в пределах одной ХП может
работать, только надо это проверить на конкретной версии ASE.
(В смысле где-то может и не работать).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34310821
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Не обязательно звать внутреннюю ХП. И в пределах одной ХП может
работать, только надо это проверить на конкретной версии ASE.
(В смысле где-то может и не работать).

работать то будет, но только оптимизатор в данном случае будет считать, что таблица состоит из 10 столбцов и 10 записей в них ;) по крайней мере в 12.5 ;)
...
Рейтинг: 0 / 0
Как ускорить?
    #34311149
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Fantasmo пишет:
> Есть только одна проблема. Вроде бы ASE 12.0 не будет использовать
> индексы в процедуре на временные таблицы.
> т.е в таком случае индекс на временную таблицу просто лишняя трата времени

Я думаю что это голословное заявление. Вообще про оптимизатор не стоит
говорить чего-то определенного. Хотя фраза "Вроде бы" немного исправляет дело...

Короче, в 11.9 замечательно в процедурах использовались индексы на временные
таблицы. Почему бы им не быть использоваными в 12.0 ?
Posted via ActualForum NNTP Server 1.3

Скажу подругому. Работать не будет.
1) Проверено уже
2) Оптимизатор на момент компиляции не знает про индексы и данные во временной таблице. Так что индекс просто не будет использоваться.
...
Рейтинг: 0 / 0
Как ускорить?
    #34311485
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad пишет:
> работать то будет, но только оптимизатор в данном случае будет считать,
> что таблица состоит из 10 столбцов и 10 записей в них ;) по крайней мере
> в 12.5 ;)

Нет, не обязательно. Я хотел написать, но почему-то не написал.

Ерик Майнер , ведущий инженер группы оптимизатора ASE,
обсуждал как-то именно этот случай в (кажется)
sybase.public.ase.performance+tuning

Он сказал, что после создания индекса увеличивается
какой-то внутренний счетчик состояния схемы данных,
после чего процедура переоптимизируется (план перестраивается),
и в этом случае должна уже быть реальная статистика о таблице,
поскольку ее собирает CREATE INDEX.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34311519
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmo пишет:
> Короче, в 11.9 замечательно в процедурах использовались индексы на временные
> таблицы. Почему бы им не быть использоваными в 12.0 ?

> Скажу подругому. Работать не будет.

> 2) Оптимизатор на момент компиляции не знает про индексы и данные во
> временной таблице.
Да, не знает.

Так что индекс просто не будет использоваться.

Во-первых, смотри мой пред. пост.
Во-вторых, ну хорошо, не хочет оптимизатор брать индекс сам - можно же и хинт
написать, (INDEX 1) , как правило, одного индекса там достаточно.
Это старинная техника, применялась еще вроде как в 11.5 и 11.0.
Ну могу я конечно путать конкретные версии, но это там между 11.0 и 11.5.
11.9 уже современный достаточно сервер, мы с ним работали много, и работали
там индексы на временные таблицы.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34311660
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Fantasmo пишет:


Во-первых, смотри мой пред. пост.
Во-вторых, ну хорошо, не хочет оптимизатор брать индекс сам - можно же и хинт
написать, (INDEX 1) , как правило, одного индекса там достаточно.
Это старинная техника, применялась еще вроде как в 11.5 и 11.0.
Ну могу я конечно путать конкретные версии, но это там между 11.0 и 11.5.
11.9 уже современный достаточно сервер, мы с ним работали много, и работали
там индексы на временные таблицы.
Posted via ActualForum NNTP Server 1.3

Хинт не прокатит
Пробовал. Он не используется.
...
Рейтинг: 0 / 0
Как ускорить?
    #34311856
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет:

Еще ссылок.

http://groups.google.com/group/sybase.public.ase.performance+tuning/search?group=sybase.public.ase.performance%2Btuning&q=indices+on+temp+table

Просто хочу подчекрнуть, что это лишь миф, что во временных
таблицах не могут использоваться индексы. Они МОГУТ использоваться.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34311858
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как ускорить?
    #34312140
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно вкратце как использовать все таки индекс?
...
Рейтинг: 0 / 0
Как ускорить?
    #34312712
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasmoА можно вкратце как использовать все таки индекс?
А какие ваши доказательства того, что он не используется? Хоть бы план запроса привел. А то все "зимы не будет, зимы не будет"...
...
Рейтинг: 0 / 0
Как ускорить?
    #34312768
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лень FantasmoА можно вкратце как использовать все таки индекс?
А какие ваши доказательства того, что он не используется? Хоть бы план запроса привел. А то все "зимы не будет, зимы не будет"...

если делать так

create table #t
insert into #t
create index #t_01

select ...
from #t (index #t_01)...

Использоваться он не будет 100%, будет обычный table scan.
...
Рейтинг: 0 / 0
Как ускорить?
    #34313010
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не был бы столь самоуверен.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table #t(i int, b varchar( 100 ))
create index idx_01 on #t(b)

declare @i int
select @i =  0 
while @i <  1000 
begin
  insert into #t(i,b) select @i, convert(varchar, @i)
  select @i = @i +  1 
end

set showplan on

select * from #t (index idx_01) where b like '1%'
дает честный результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
QUERY PLAN FOR STATEMENT  1  (at line  1 ). 




    STEP  1  
        The type of query is SELECT. 


        FROM TABLE 
            #t 
        Nested iteration. 
        Index : idx_01 
        Forward scan. 
        Positioning by key. 
        Keys are: 
            b  ASC 
        Using I/O Size  16  Kbytes for index leaf pages. 
        With LRU Buffer Replacement Strategy for index leaf pages. 
        Using I/O Size  16  Kbytes for data pages. 
        With LRU Buffer Replacement Strategy for data pages. 

Правда сервер 12.5.3, но мне помнится что и в 12.0 такое же поведение
...
Рейтинг: 0 / 0
Как ускорить?
    #34313153
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:D

Server Message: Number 307, Severity 10
Line 11:
Index 'idx_01' specified as optimizer hint in the FROM clause of table '#t' does not exist. Optimizer will choose another index instead.


QUERY PLAN FOR STATEMENT 1 (at line 1).




STEP 1
The type of query is CREATE TABLE.




QUERY PLAN FOR STATEMENT 2 (at line 2).




STEP 1
The type of query is CREATE INDEX.
TO TABLE
#t




QUERY PLAN FOR STATEMENT 3 (at line 3).




STEP 1
The type of query is DECLARE.




QUERY PLAN FOR STATEMENT 4 (at line 4).




STEP 1
The type of query is SELECT.




QUERY PLAN FOR STATEMENT 5 (at line 5).




STEP 1
The type of query is COND.




QUERY PLAN FOR STATEMENT 6 (at line 7).




STEP 1
The type of query is INSERT.
The update mode is direct.
TO TABLE
#t




QUERY PLAN FOR STATEMENT 7 (at line 8).




STEP 1
The type of query is SELECT.




QUERY PLAN FOR STATEMENT 8 (at line 10).




STEP 1
The type of query is SET OPTION ON.




QUERY PLAN FOR STATEMENT 9 (at line 11).




STEP 1
The type of query is SELECT.


FROM TABLE
#t
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 4 Kbytes for data pages.
With MRU Buffer Replacement Strategy for data pages.
...
Рейтинг: 0 / 0
Как ускорить?
    #34313171
Fantasmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот результат получился если всю процедуру запустить.
А если по частям, сначала таблица потом инсерт
и отдельно запустить селект, то выборка идет по индексу, как у вас... И что делать?
...
Рейтинг: 0 / 0
Как ускорить?
    #34313204
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasmoЭтот результат получился если всю процедуру запустить.
А если по частям, сначала таблица потом инсерт
и отдельно запустить селект, то выборка идет по индексу, как у вас... И что делать?
То что рекомендует Sybase - разбить на 2 батча, или 2 процедуры.
...
Рейтинг: 0 / 0
Как ускорить?
    #34313811
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantasmo пишет:
> если делать так
>
> create table #t
> insert into #t
> create index #t_01
>
> select ...
> from #t (index #t_01)...
>
> Использоваться он не будет 100%, будет обычный table scan.

Так я же говорю,
select ... from #t (index 1)...
надо писать.

Естественно, по (index #t_01) он использоваться НЕ будет.
Потому что ПЛАН ЗАПРОСА ПРОЦЕДУРЫ СОЗДАЕТСЯ ДО ЕЕ ВЫПОЛНЕНИЯ,
и индекс #t_01 в этот момент еще не существует.

А вот если указывать индекс по номеру, то он БУДЕТ использоваться.
(хотя это и кажется странным, видимо при этом в план тупо
пишется идентификатор индекса минуя фазу разрешения имени индекса
в его идентификатор и поэтому это прокатывает)

Номера индексов- это идентификаторы их в SYSINDEXES.
0 - сама таблица (forced table scan)
1 - кластерный индекс
2 - первый некластерный,
и т.д.

Но обычно хватает ОДНОГО индекса, который единственный обычно.

На DOL-таблицах индекса 1 нет, там сразу с 2-х.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34313817
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лень пишет:
> То что рекомендует Sybase - разбить на 2 батча, или 2 процедуры.

Господа, ну сколько говорить-то можно - нет, не обязательно разбивать.
Это очень устаревшая техника, сейчас никакого смысла это делать нет.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как ускорить?
    #34314104
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
лень пишет:
> То что рекомендует Sybase - разбить на 2 батча, или 2 процедуры.

Господа, ну сколько говорить-то можно - нет, не обязательно разбивать.
Это очень устаревшая техника, сейчас никакого смысла это делать нет.
Posted via ActualForum NNTP Server 1.3

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


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