Главная страница
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.035 c
15-1170832961
iXT
2007-02-07 10:22
2007.03.04
FreeWare Аналоги


15-1170424466
LenaS
2007-02-02 16:54
2007.03.04
Где можно найти ?


2-1171093444
inkvizitor
2007-02-10 10:44
2007.03.04
открытие текстового файла в StringGrid


3-1165583259
DelphiLexx
2006-12-08 16:07
2007.03.04
импортировать xml в БД Firebird 2.0


15-1171056753
vasIZmax
2007-02-10 00:32
2007.03.04
Глюк?! или ...