jueves, 23 de julio de 2009

El factor "PARSEO" en una instrucción SQL

Muchas veces nos preguntamos, si nuestras sentencias SQL estan bien escritas.
Uno de los factores más importantes en la ejecución de un SQL en nuestra base de datos, es el "PARSEO".
Cuando queremos ejecutar una sentencia en SQL, la base de datos verifica entre otras cosas:
  1. Nuestro usuario tiene privilegios en la base de datos para realizar la consulta
  2. La sentencia SQL tiene una sintáxis correcta
  3. Genera o busca un explain plan que cumpla con los requirimientos para ejecutar nuestra sentencia
  4. Ejecuta la sentencia
  5. Genera un FETCH de datos - Opcional-

Del punto 1 al 3 es lo que conocemos como PARSEO y este puede consumir muchas veces más del 90% del tiempo de ejecución de una sentencia en la base de datos.

Veamos el siguiente ejemplo, para introducirnos en el tema. Ambas sentencias producen lo mismo, la diferencia esta en como se parsea la instrucción.

En este caso el ejemplo 1, consume un 90% más de tiempo de ejecución que el ejemplo 2.


INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION
--------------- ---------------- -----------------

alpha2 racdb2.laboratorio.co.cr 10.2.0.4.0

SQL> create table t(x number, y varchar2(1));

Table created.


Ejemplo 1

SQL> set timing on
SQL> begin
2 for i in 1 .. 100000
3 loop
4 execute immediate
5 'insert into t(x,y)
6 values (' i',''x'')';
7 end loop;
8 end;
9 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:27.94

SQL> truncate table t;

Table truncated.

Elapsed: 00:00:00.41

Ejemplo 2

SQL> begin
2 for i in 1 .. 100000
3 loop
4 execute immediate
5 'insert into t(x,y)
6 values (:i,''x'')'
7 using i;
8 end loop;
9 end;
10 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.80

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar