![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему-то виснет....................................
___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 есть ?