Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.036 c
2-1171122427
verywell
2007-02-10 18:47
2007.03.04
if, exit,... что лучше?


4-1161180319
GanibalLector
2006-10-18 18:05
2007.03.04
Потоки...(очереди сообщений)


15-1170905273
Vasil
2007-02-08 06:27
2007.03.04
http://www.yourfilelink.com сдох. Стал требовать просмотра реклам


15-1171023997
homm
2007-02-09 15:26
2007.03.04
Вопрос по висте


15-1170732655
brother
2007-02-06 06:30
2007.03.04
Бесплатный хостинг с поддержкой php




   Наверх