PL/SQL performans kazanımları ile ilgili makalelerde ve
ORACLE dökümantasyonunda NUMBER tipi yerine PLS_INTEGER
kullanılmasını tavsiye ediliyor. Sebebi de PLS_INTEGER machine arithmetic
kullanıyor, yani native bir data tipi. NUMBER ve BINARY_INTEGER ise library
arithmetic kullanıyor.
Aşağıdaki testi siz de yapabilirsiniz. Float vb. Özel durumu
olmayan PL/SQL numeric data tipi olarak PLS_INTEGER kullanıyor olmamız
performans açısından etkili olacaktır.
Sonuç:
Number islemleri icin gecen sure: 85
PLS_INTEGER islemleri icin gecen
sure: 18
Test:
DECLARE
l_pls_integer PLS_INTEGER;
l_pls_integer_2 PLS_INTEGER;
l_number NUMBER;
l_number_2 NUMBER;
l_pls_integer_start PLS_INTEGER;
l_pls_integer_end PLS_INTEGER;
l_number_start PLS_INTEGER;
l_number_end PLS_INTEGER;
BEGIN
----------------------------------------------------------------
-- pls_integer islemleri.
l_pls_integer_start :=
dbms_utility.get_cpu_time;
-- degiskene deger atama.
FOR i IN 1 .. 10000000 LOOP
l_pls_integer
:= i;
END LOOP;
--degiskenler arasi atama.
FOR i IN 1 .. 10000000 LOOP
l_pls_integer_2
:= l_pls_integer;
END LOOP;
l_pls_integer_end :=
dbms_utility.get_cpu_time;
----------------------------------------------------------------
-- number islemleri.
l_number_start :=
dbms_utility.get_cpu_time;
-- degiskene deger atama.
FOR i IN 1 .. 10000000 LOOP
l_number := i;
END LOOP;
--degiskenler arasi atama.
FOR i IN 1 .. 10000000 LOOP
l_number_2 :=
l_number;
END LOOP;
l_number_end :=
dbms_utility.get_cpu_time;
dbms_output.put_line('Number islemleri
icin gecen sure: ' ||
to_char(l_number_end - l_number_start));
dbms_output.put_line('PLS_INTEGER
islemleri icin gecen sure: ' ||
to_char(l_pls_integer_end - l_pls_integer_start));
END;
Hiç yorum yok:
Yorum Gönder