Главная страница
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.058 c
15-1170682020
TCrash
2007-02-05 16:27
2007.03.04
SolidWorks - вопрос по внедрению


15-1171202518
Kerk
2007-02-11 17:01
2007.03.04
25й час


2-1171368776
Flood_control
2007-02-13 15:12
2007.03.04
Вопросы по компоненту MediaPlayer


11-1150277462
Don
2006-06-14 13:31
2007.03.04
Ошибка в OpenSaveDialog


2-1171604988
Novichok_new
2007-02-16 08:49
2007.03.04
Скачать файлы из Интернета