powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA902. Оптимизация запроса
5 сообщений из 5, страница 1 из 1
ASA902. Оптимизация запроса
    #38650816
dorian grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто-нибудь помочь с такой проблемой.

Есть таблицы tb, tb_tmp.
Структура идентична, id_str уникально, не формируется как PK, переносится в tb_tmp с остальными данными.
Данные закачиваются в tb_tmp из файла и потом инсертом вставляются в tb.
Проблема в том, что в tb после инсерта надо заполнить поле tp.
Это поле показывает, что следующая запись (по полям dat, id_material) в tb будет с отрицательным полем kol.

Кроме как заполнять циклом по всей таблице tb_tmp ничего не придумал.
Но это очень медленно.
Есть ли возможность ускорить?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare local temporary table tb(
ID integer,
DAT date,
ID_material integer,
KOL decimal (17,5),
TP integer
)

declare local temporary table tb_tmp(
ID integer,
DAT date,
ID_material integer,
KOL decimal (17,5),
TP integer
)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
for da as da_cursor dynamic scroll cursor for
select tb_tmp.dat as _dat,tb_tmp.id_material as _mat, tb_tmp.kol as _kol
isnull((select first tb.id from tb where tb.dat<_dat and tb.id_material=_inv and order by tb.dat desc,tb.id desc),0) as _id
from tb_tmp where _kol<0 do

update tb set tp=1 where tb.id=_id and _id<>0

end for;
...
Рейтинг: 0 / 0
ASA902. Оптимизация запроса
    #38650831
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повесь триггер на tb. Пусть он обновляет поле с нарастающим итогом как нужно.
...
Рейтинг: 0 / 0
ASA902. Оптимизация запроса
    #38650959
dorian grey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПовесь триггер на tb. Пусть он обновляет поле с нарастающим итогом как нужно.

Попробовал, по времени не получилось быстрее.
...
Рейтинг: 0 / 0
ASA902. Оптимизация запроса
    #38650976
DenisBocharic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если поле ID уникально, создайте по нему первичный ключ, а также поэкспериментируйте с индексами по полям dat и id_material
...
Рейтинг: 0 / 0
ASA902. Оптимизация запроса
    #38712685
west74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так ли нужен курсор ?
может через lateral одним запросом ?


begin

declare local temporary table tb(
ID integer,
DAT date,
ID_material integer,
KOL decimal (17,5),
TP integer
);

declare local temporary table tb_tmp(
ID integer,
DAT date,
ID_material integer,
KOL decimal (17,5),
TP integer
);


update tb set tp=1 where tb.id in (
select C.id
from tb A join tb_tmp B on A.id=B.id,
lateral(select first C.id from tb C where C.dat<A.dat and C.id_material=A.id_material order by C.dat desc,C.id) C
where B.kol<0 and C.id is not null);

commit;



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


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