powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Использование индексов для временных таблиц
6 сообщений из 6, страница 1 из 1
Использование индексов для временных таблиц
    #32255398
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код тестовой процедуры:

drop proc _tmp
go
set forceplan on
go
create proc _tmp
as
begin
if object_id("#tmp") is not null drop table #tmp

create table #tmp(
tmp1 numeric(5,0) not null,
tmp2 varchar(50) null,
primary key (tmp1))

select * from #tmp (1)
end
go
set forceplan off
go

Вот код запуска:

set showplan on
go
exec _tmp
go
set showplan off
go

В первый раз получаем план исполнения:
STEP 1
The type of query is SELECT.


FROM TABLE
#tmp
Nested iteration.
Using Clustered Index.
Index : _tmp_13777325131
Forward scan.
Positioning at start of table.
Using I/O Size 2 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


(0 rows affected)
(return status = 0)

Запускаем еще раз:
STEP 1
The type of query is SELECT.


FROM TABLE
#tmp
Nested iteration.
Using Clustered Index.
Index name not found.
Forward scan.
Positioning at start of table.
Using I/O Size 2 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


(0 rows affected)
(return status = 0)

Кто-нибудь может пояснить куда делся индекс?
Отказ от set forceplan ничего не дает, если использовать именованный индекс
и опцию (index имя_индекса) ситуация аналогичная.

Спасибо.
...
Рейтинг: 0 / 0
Использование индексов для временных таблиц
    #32255503
annonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй использовать указание индекса не по имени а по номеру,
например (index 1).
...
Рейтинг: 0 / 0
Использование индексов для временных таблиц
    #32255667
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аналогично.

Это нормальное поведение сервера или какой-то баг и надо ставить ebf ?

У меня например Adaptive Server Enterprise/12.5.0.2/EBF 10580 IR/P/NT (IX86)/OS 4.0/rel12502/1850/32-bit/OPT/Fri Oct 18 19:51:23 2002.
...
Рейтинг: 0 / 0
Использование индексов для временных таблиц
    #32255672
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то я против использования индексов в tempdb по ряду причин и подчиненные мне программисты ими не пользуются.
Но в Вашем случае,я думаю,имеет место быть баг SYBASE.
Т.к.истинные имена в tempdb формируются динамически,а указание в create слов primary key-это команда на создание индекса,то,возможно,на создание индекса он прихватил другую таблицу из семейства #temp.
Попробуйте сузить ему степень свободы:создайте индекс после заполнения таблицы и не кластерный-быстрей создается,может поможет.
...
Рейтинг: 0 / 0
Использование индексов для временных таблиц
    #32255927
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to KOLCHOZ_POSTEVENT
>Вообще-то я против использования индексов в tempdb по ряду причин и >подчиненные мне программисты ими не пользуются.
Логично, но программисты мне не подчиняются.

>Попробуйте сузить ему степень свободы:создайте индекс после заполнения >таблицы и не кластерный-быстрей создается,может поможет.
Изменил на :

create table #tmp(
tmp1 numeric(5,0) not null,
tmp2 varchar(50) null)

create index pk_tmp on #tmp (tmp1)

select * from #tmp (index pk_tmp)

Результат тот же, в первый раз индекс видит, потом нет.

>Но в Вашем случае,я думаю,имеет место быть баг SYBASE.
Возможно, если у вас есть тех. поддержка нельзя ли спросить у представителей?
Вобще у остальных тот же эффект, или это у меня что-то с сервером?

Если все это делать не в хранимой, т.е.
create table #tmp(
tmp1 numeric(5,0) not null,
tmp2 varchar(50) null,
primary key (tmp1))

set showplan on
go
select * from #tmp (index 1)
go
set showplan off
go

то все хорошо, индекс видится всегда
STEP 1
The type of query is SELECT.


FROM TABLE
#tmp
Nested iteration.
Using Clustered Index.
Index : _tmp_10038978291
Forward scan.
Positioning at start of table.
Using I/O Size 2 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


(0 rows affected)
...
Рейтинг: 0 / 0
Использование индексов для временных таблиц
    #32256012
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос перешел в раздел теоретических, как решение можно использовать
создание временной таблицы до вызова хранимой процедуры, причем не важно создается она скриптом или в другой хранимой процедуре, т.е. следующий код работает

if object_id("#tmp") is not null drop table #tmp
go
create table #tmp(
tmp1 numeric(5,0) not null,
tmp2 varchar(50) null,
primary key (tmp1))
go

drop proc _tmp
go
set forceplan on
go
create proc _tmp
as
begin
select * from #tmp (1)
end
go

drop proc _tmp1
go
create proc _tmp1
as
begin
if object_id("#tmp") is not null drop table #tmp

create table #tmp(
tmp1 numeric(5,0) not null,
tmp2 varchar(50) null,
primary key (tmp1))

exec _tmp
end
go
set forceplan off
go

При последующих вызовах
set showplan on
go
exec _tmp1
go
set showplan off
go
Выдается, причем Index : _tmp_21328064371 меняется (например _tmp_10128024471), т.е. индекс нормально создается и цепляется.

STEP 1
The type of query is SELECT.


FROM TABLE
#tmp
Nested iteration.
Using Clustered Index.
Index : _tmp_21328064371
Forward scan.
Positioning at start of table.
Using I/O Size 2 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


(0 rows affected)
(return status = 0)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Использование индексов для временных таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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