powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как ускорить?
18 сообщений из 43, страница 2 из 2
Как ускорить?
    #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
18 сообщений из 43, страница 2 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как ускорить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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