SQL> alter session set plsql_code_type = 'INTERPRETED'
2 /
Sesión modificada.
SQL>
Luego creé un procedimiento con cálculos y bucles:
SQL> create or replace procedure prueba_de_velocidad1 as
2 z number;
3 begin
4 for x in 1..10000 loop
5 for y in 1..10000 loop
6 z := x * y;
7 end loop;
8 end loop;
9 end;
10 /
Procedimiento creado.
SQL>
... y otro con SQL:
SQL> create or replace procedure prueba_de_velocidad2 as
2 cursor c1 is select a.table_name
3 from dba_tables a, dba_tables b;
4 begin
5 for c1_rec in c1 loop
6 null;
7 end loop;
8 end;
9 /
Procedimiento creado.
SQL>
Para hacer unas compilaciones nativas, ejecuté el comando siguiente:
SQL> alter session set plsql_code_type = 'NATIVE'
2 /
Sesión modificada.
SQL> create or replace procedure prueba_de_velocidad3 as
2 z number;
3 begin
4 for x in 1..10000 loop
5 for y in 1..10000 loop
6 z := x * y;
7 end loop;
8 end loop;
9 end;
10 /
Procedimiento creado.
SQL> create or replace procedure prueba_de_velocidad4 as
2 cursor c1 is select a.table_name
3 from dba_tables a, dba_tables b;
4 begin
5 for c1_rec in c1 loop
6 null;
7 end loop;
8 end;
9 /
Procedimiento creado.
SQL>
Así tenía cuatro procedimientos:
- Prueba_de_velocidad1: Compilación interpretada de cálculos y bucles.
- Prueba_de_velocidad2: Compilación interpretada de SQL.
- Prueba_de_velocidad3: Compilación nativa de cálculos y bucles.
- Prueba_de_velocidad4: Compilación nativa de SQL.
Luego hice las pruebas:
SQL> set timing on
SQL> exec prueba_de_velocidad1;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:08.11
SQL> exec prueba_de_velocidad3;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:05.98
SQL> exec prueba_de_velocidad2;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:46.04
SQL> exec prueba_de_velocidad4;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:45.50
SQL>
...y miré los resultados:
- Prueba_de_velocidad1: Compilación interpretada de cálculos y bucles: 8.11 segundos.
- Prueba_de_velocidad3: Compilación nativa de cálculos y bucles: 5.98 segundos (una diferencia de 26%).
- Prueba_de_velocidad2: Compilación interpretada de SQL: 46.04 segundos.
- Prueba_de_velocidad4: Compilación nativa de SQL: 45.50 segundos (una diferencia de 1%).
Por fin, repetí las pruebas en el orden inverso pero los resultados eran iguales:
SQL> exec prueba_de_velocidad3;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:05.99
SQL> exec prueba_de_velocidad1;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:08.11
SQL> exec prueba_de_velocidad4;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:45.19
SQL> exec prueba_de_velocidad2;
Procedimiento PL/SQL terminado correctamente.
Transcurrido: 00:00:45.98
SQL>
SQL> set timing off
SQL>
No hay comentarios:
Publicar un comentario