Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему-то виснет....................................


___Nikolay ©   (2003-10-21 11:21:00) 

Таблица T1
Поле1 CODE CHAR(20)
Поле2 NVALUE NUMERIC(15,2) <- во всех записях значение 0

Таблица T2
Поле1 CODE CHAR(20)
Поле2 NVALUE NUMERIC(15,2) <- во всех записях значение <> 0

Нужно, обновить значения поля NVALUE таблицы T1,
заменив их на значения одноименного поля таблицы T2,
где значения полей CODE обоих таблиц совпадает

*T1*
/->NVALUE (где T2.CODE = T1.CODE)
|
| *T2*
`- NVALUE

Пишу такую процедурку:

CREATE PROCEDURE TEST_FILL
AS
DECLARE VARIABLE CODE CHAR(20);
DECLARE VARIABLE NVALUE NUMERIC(15,2);
begin
for
select CODE, NVALUE from T2
into :CODE, :NVALUE
do
begin
update T1
set NVALUE = :NVALUE
where CODE = :CODE;
end
end


Если записей в таблицах немного - отрабатывает нормально,
А если записей, например, 10000 - зависает..

В режиме отладки при первой же итерации код


select CODE, NVALUE from T2
into :CODE, :NVALUE


довольно долго выполняется, а при выполнении


update T1
set NVALUE = :NVALUE
where CODE = :CODE;


приложение вообще зависает...

HELP! ЧТО Я НЕПРАВИЛЬНО ДЕЛАЮ?


Zacho   (2003-10-22 08:46:00) [1]

Да, что-то проглючил :( При использовании этой ХП индекс по CODE в таблице Т2 прироста производительности не даст.


Zacho   (2003-10-22 08:27:00) [2]

Учти: для того, чтобы работало действительно быстро, индекс на поле CODE должен быть в обоих таблицах. И вообще, у меня сильное подозрение, что в одной из таблиц CODE должно быть первичным ключем, а во второй, соответственно, внешним. Тогда дополнительно индексы создавать не надо.


___Nikolay   (2003-10-22 06:24:00) [3]

Пасиб!


Zacho   (2003-10-21 12:41:00) [4]


> ___Nikolay © (21.10.03 12:14) [5]
> 2 Vlad ©
> Индекса нет

Вот все из-за этого. Оно не виснет, а просто работает о-о-очень медленно.


Vlad   (2003-10-21 12:32:00) [5]

2 Vlad ©
Индекса нет

Тогда желаю успехов :-/


___Nikolay   (2003-10-21 12:14:00) [6]

2 Vlad ©
Индекса нет

2 Alex_Bredin ©
Попробую!
Имена менял - не помогает


Alex_Bredin   (2003-10-21 11:45:00) [7]

текст хп верный...
может поменять имена переменных?
они же дублируют имена исп-ся полей


Zacho   (2003-10-21 11:31:00) [8]


> Alex_Bredin © (21.10.03 11:28) [2]

Так будет гораздо медленнее, чем ХП.


Alex_Bredin   (2003-10-21 11:28:00) [9]

попробуй так

update T1
set nvalue=(select distinct nvalue from t2 where t1.code=t2.code)


Vlad   (2003-10-21 11:25:00) [10]

Индекс в T1 по полю CODE есть ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо