sql >> Base de Datos >  >> RDS >> Sqlserver

¿El uso de una función para simplificar SQL Query afectará enormemente el rendimiento?

Normalmente, seleccionando un resultado de una función escalar no hará mucho daño, pero filtrar puede costar fácilmente cientos de segundos (aunque no necesariamente).

Si necesita filtrar por el resultado de una función escalar (WHERE col = dbo.scalar_function() ), a menudo ayuda crear una función con valores de tabla en línea. Devolvería su valor como la única fila de la tabla de resultados. Entonces harías inner join con el resultado de la función, filtrando efectivamente por el valor devuelto. Esto funciona porque SQL Server siempre puede deshacer las funciones con valores de tabla en línea y alinearlas en la consulta de llamada.

Tenga en cuenta que este truco no funcionará si la función es de varios pasos. Estos no se pueden desenrollar.