Qué usar? Ver o Tabla temporal

Tengo un problema para decidir si usar una vista o una tabla temporal.

Tengo un procedimiento almacenado que llamo desde el progtwig. En ese SP, almaceno el resultado de una consulta larga en una tabla temporal, nombro las columnas y realizo otras consultas en esa tabla, almaceno los resultados en tags o una vista de cuadrícula o lo que sea y dejo caer la Tabla de temperatura. También podría almacenar el resultado de la consulta en una vista y realizar consultas en esa vista. Entonces, ¿qué es mejor o en qué caso TENGO que usar un VIEW / Temp Table?

De acuerdo con mi investigación, una vista tiene el beneficio de: Seguridad, Simplicidad y Especificación de nombre de columna. Mi table temporal cumple todo eso también (según mi opinión).

Si la consulta es "larga" y está accediendo a los resultados de múltiples consultas, entonces una tabla temporal es la mejor opción.

Una vista, en general, es solo un atajo para una statement select . Si no implica que los resultados alguna vez se ejecuten y procesen. Si usa una vista, los resultados deberán regenerarse cada vez que se use. Aunque las ejecuciones posteriores de la vista pueden ser más eficientes (digamos porque las páginas utilizadas por la consulta de vista están en caching), una tabla temporal realmente almacena los resultados.

En SQL Server, también puede usar variables de tabla ( declare @t table . . . ).

El uso de una tabla temporal (o variable de tabla) dentro de un solo procedimiento almacenado parece tener pocas implicaciones en términos de security, simplicidad y nombres de columna. La security se manejaría mediante el acceso al procedimiento almacenado. Los nombres de columna son necesarios para cualquier solución. La simplicidad es difícil de juzgar sin más información, pero nada es especialmente complicado.

depende

Una vista debe replicar el procesamiento de su "consulta larga" cada vez que se ejecuta, mientras que una tabla temporal almacena los resultados.

Entonces, ¿quieres usar más procesamiento o más almacenamiento?

Puede almacenar algunos valores de vista (índice persistente) que podrían ayudar en el procesamiento, pero no proporciona suficiente información para explorar realmente esto.

Si está hablando simplemente de almacenar los datos para el uso dentro de una única llamada a procedimiento, entonces una tabla temporal es el path a seguir.

En realidad, es una pregunta y una respuesta situacional y específica de la operación que puede variar según los requisitos del escenario. Sin embargo, un pequeño punto que me gustaría agregar es que si está usando una vista para almacenar resultados de una consulta compleja, que a su vez se utilizan en operaciones de un GridView, entonces puede ser problemático realizar operaciones de actualización en vistas complejas . Por el contrario, las tablas temporales pueden ser suficientes para esto perfectamente.

De nuevo, hay escenarios en los que las vistas pueden ser una mejor opción [como en los serveres de bases de datos múltiples si no se manejan adecuadamente], pero depende de lo que desee hacer.