Tengo una base de datos donde estoy usando TVF en línea (funciones de valor de tabla) en lugar de vistas. Por ejemplo, podría tener dos tablas llamadas [modelo de automóvil] y [fabricante de automóviles] que uniré dentro de TVF [fnCarBrands].
Luego, estos TVF son llamados por otros TVF para realizar más procesamiento e informes. Entonces podría tomar mi función [fnCarBrands] y unirme a la tabla [Año de compra] para formar una función [fnCarBrandHistory]. Y así sucesivamente para varias capas de TVF.
Probablemente podría obtener la misma funcionalidad usando vistas, ya que mis TVF en línea son realmente solo uniones de tablas y otros TVF.
¿Cómo se compara el rendimiento de los TVF en línea escritos de esta manera con las vistas?
sql-server-2005
performance
view
functions
Puño de la furia
fuente
fuente
Respuestas:
El optimizador de consultas trata una función con valores de tabla en línea exactamente como una vista:
Una función con valores de tabla de varias instrucciones se ejecuta más como un procedimiento almacenado. Por lo general, deben ejecutarse varias veces, en lugar de plegarse en la consulta principal:
fuente
Deberá crear vistas similares a las funciones y consultar cada una mirando el plan de ejecución para ver qué sucede con cada una.
fuente
Por supuesto, crear vistas que llamen a otras vistas también es un asesino de rendimiento. No sigas por esa ruta. Escriba las consultas que necesita y no use TVF ni vistas si desea rendimiento. Es la estratificación la que está creando el problema, esto casi siempre es algo malo cuando se consulta una base de datos y puede terminar rápidamente alcanzando el límite de la cantidad de tablas a las que también puede hacer referencia, especialmente porque a menudo termina haciendo referencia al mismas tablas en diferentes capas. Además, si bien parece que sería más fácil de mantener, no lo es. Intente depurar o agregar una columna debido a un nuevo requisito cuando la capa que necesita arreglar esté en la parte inferior.
fuente