Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.04;
Скачать: CL | DM;

Вниз

Какая функция отработает быстрее   Найти похожие ветки 

 
alsov ©   (2006-12-07 17:17) [0]

Приветствую, Мастера
написал 2 функции, выполняющие одно и то же
Хотелось бы услышать мнение, какая из них быстрее будет работать

function is_value_exist(
                                aparameter_id IN NUMBER,
                                aworker_id IN NUMBER
                                ) return number
is
l_tmp number(10);
begin
 select 1 into l_tmp
 from stpir.value
 where parameter_id=aparameter_id and worker_id=aworker_id;
 return l_tmp;
exception
 when no_data_found then return null;
end is_measure_value_exist;

procedure worker_value_i(
                                aparameter_id IN NUMBER,
                                aworker_id IN NUMBER,
                                avalue IN NUMBER

                                )
IS

BEGIN
 if is_value_exist(aparameter_id, aworker_id) is null then
   INSERT INTO worker_value (
                                   parameter_ID,
                                   WORKER_ID,
                                   VALUE)
                           VALUES (
                                   aparameter_id,
                                   aworker_id,
                                   avalue);
 else
   update worker_value
      set value=value+avalue
   where parameter_id=aparameter_id and worker_id=aworker_id;
 end if;

END;


И вторая, написал через merge

procedure stpir_worker_value_i(
                                aworker_id in number,
                                aparameter_id in number,
                                avalue in number
                                )
is
begin
 merge into stpir.worker_value mwv
   using (select aparameter_id as parameter_id, aworker_id as worker_id from dual) d
         on (d.worker_id=mwv.worker_id and d.parameter_id=mwv.parameter_id)
   when matched then update set mwv.value=mwv.value+avalue
   when not matched then insert (mwv.worker_id, mwv.parameter_id, mwv.value)
                         values (aworker_id, aparameter_id, avalue);

end;


Заранее благодарен


 
alsov ©   (2006-12-07 17:20) [1]

Вроде ставил галку
СУБД Oracle


 
Desdechado ©   (2006-12-07 17:23) [2]

померить не проще?
тем более обращение к данным из таблиц


 
alsov ©   (2006-12-07 17:57) [3]


> Desdechado

А каким образом?


 
k2 ©   (2006-12-07 18:38) [4]

sql_trace, tkprof, runstats от Tom Kyte
кстати в книжках пишут, што merge дает выигрыш в производительности на больших объемах, интересно так ли это в данном конкретном случае


 
ANB ©   (2006-12-07 19:04) [5]


> кстати в книжках пишут, што merge дает выигрыш в производительности
> на больших объемах

И не на больших тоже - проверяли. Я тоже написал с ифом, потом переписал на мерж. Быстрее.
PL/SQL вносит доп.тормоза.



Страницы: 1 вся ветка

Текущий архив: 2007.03.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.06 c
2-1171303026
amphest_coder
2007-02-12 20:57
2007.03.04
Полный выход из углубления через Inherited


6-1159622677
Русло
2006-09-30 17:24
2007.03.04
Обработка почты...


15-1170917756
fisherman
2007-02-08 09:55
2007.03.04
Завод купил напольные весы...


15-1170839769
alien1769
2007-02-07 12:16
2007.03.04
1C Сервер ТТХ


15-1171041303
Knight
2007-02-09 20:15
2007.03.04
Кто-нить имел опыт восстановления доступа к ICQ...