SQL - Rendimiento función t-sql según paso parámetros

 
Vista:

Rendimiento función t-sql según paso parámetros

Publicado por Fernando Izquierdo (2 intervenciones) el 29/01/2016 11:59:40
Hola;


Tengo una consulta de sql server que llama a una función.
Dependiendo de cómo le paso los parámetros tiene un rendimiento u otro. Me explico con un ejemplo muy muy simplificado:

Tengo una tabla con dos campos: campo1 nvarchar(255), campo2 datetime

1
2
3
SELECT campo1, campo2
FROM tabla t
WHERE dbo.funcion(t.campo1, t.campo2) = 1

Esto tarda alrededor de 1 minuto en la consulta real.
Si la consulta la hago de esta otra forma tarda alrededor de 13 segundos:

1
2
3
4
5
6
7
8
DECLARE @c1 nvarchar(255)
SET @c1=’PRUEBA’
DECLARE @c2 datetime
SET @c2=’29/01/2016’
 
SELECT campo1, campo2
FROM tabla t
WHERE dbo.funcion(@c1, @c2) = 1

La diferencia está sólo en los parámetros de la función.

He probado a simplificar la función hasta el punto de retornar siempre un 1 y el rendimiento es similar (peor en la primera opción)

¿Alguien sabe por qué puede pasar esto, y cómo solucionarlo? Por lógica de la consulta necesito la primera opción

Gracias por anticipado,
Fernando Izquierdo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Rendimiento función t-sql según paso parámetros

Publicado por Isaias (1921 intervenciones) el 29/01/2016 19:20:05
¿Y que hace la funcion?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rendimiento función t-sql según paso parámetros

Publicado por Fernando (2 intervenciones) el 01/02/2016 09:33:49
Hola Isaias;

La función hace una llamada a base de datos para devolver un resultado.
Pero está optimizada y, como comento en en el post, si cambio los parámetros de t.campo1, t.campo2 a variables ya definidas @c1,@c2 funciona perfectamente y rápidamente aunque, claro está, no devuelve lo que debe devolver.

Volveré a revisar la función para ver si la puedo optimizar, pero mi pregunta era sobre el cambio de comportamiento al pasar los parámetros de una manera u otra.
Pensando ahora, en el caso de pasarle variables, si siempre tienen el mismo valor, ¿sólo calcula una vez la función? Probablemente la diferencia esté ahí.

Bueno, gracias, seguiré investigando.

Saludos,
Fernando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar