lunes, 4 de mayo de 2009

PL/SQL: Performance: SQL Nativo Dinámico vs DBMS_SQL

Para ejecutar instrucciones SQL (DML y DDL) en forma dinámica se puede usar "SQL Nativo Dinámico" (Native Dynamic SQL) o el package DBMS_SQL. En general, el primero tiene mejor rendimiento que el DBMS_SQL, sin embargo, hay oportunidades en que el package DBMS_SQL es una mejor opción desde el punto de vista del rendimiento. Esto se debe a que usando el DBMS_SQL es necesario hacer el análisis o "parsing" de la instrucción solo una vez, en cambio, el "SQL Nativo Dinámico" hace este análisis cada vez que es invocada la instrucción. Una prueba ejecutada en una base de datos Oracle 9i sobre W2k3 nos muestra lo siguiente:
SQL Nativo Dinámico:Tot.Ciclos:20.000:Tiempo total:13 segundos.
DBMS_SQL:Tot.Ciclos:20.000:Tiempo total:6 segundos.
En este caso, el tiempo de ejecución es de 2:1. Esto es válido para versiones 8i y 9i. En 10g hay una mejora con respecto a la ejecución de NDS.