Oracle©: Consejos y Trucos para programadores

domingo 19 de abril de 2009

PL/SQL: Performance: Verificar existencia de un registro

Para verificar la existencia de un registro es mucho mejor usar una función ad-hoc existe, que verifique la existencia en vez de contar la cantidad de registros con un select count y preguntar si la cantidad de registros es mayor que cero. Esto es más dramático cuando usamos un where por un campo con valor no único o una clausula like. Por ejemplo, si deseamos saber si existe un registro con tipo de objeto = 'SYNONYM' , una alternativa (generalmente usada) es hacer:
SELECT COUNT (*)
FROM   objetos
WHERE  object_type = 'SYNONYM';
Una mejor alternativa es hacer una función:
FUNCTION existe (
p_object_type   IN   objetos.object_type%TYPE
)
RETURN BOOLEAN IS
CURSOR c_existe IS
SELECT 'x'
FROM   objetos
WHERE  object_type = p_object_type;

v_dummy    VARCHAR2 (1);
v_existe   BOOLEAN;
BEGIN
OPEN c_existe;
FETCH c_existe
INTO  v_dummy;
v_existe := c_existe%FOUND;
CLOSE c_existe;
RETURN v_existe;
END existe;
El primer caso recorre todos los registros, en el segundo caso, solo llega al primer registro y retorna la existencia. Si creamos un bloque anónimo con llamadas iterativas a estas dos instrucciones, tenemos que el tiempo de ejecución es mucho menor para el código ad-hoc eEvalua_Count_vs_Existencia.sql La salida de este script es: Select vía Count:Tiempo en segundos:TF-TI:147 segundos. Función existe::Tiempo en segundos:TF-TI:2 segundos. Por lo tanto, el tiempo de respuesta y el uso de recursos son mucho mejores en el segundo caso. Además, la función de existencia es fácil de implementar programáticamente usando el diccionario de la base de datos.

Etiquetas: , , ,

0 comentarios:

Publicar un comentario en la entrada



<$I18N$LinksToThisPost>:

Crear un enlace

<< Página principal