sql - update - Qué usar? Ver o Tabla temporal
tablas temporales vs variables tipo tabla sql server (4)
Tengo un problema para decidir si usar una vista o una tabla temporal.
Tengo un procedimiento almacenado que llamo desde el programa. 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 etiquetas 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 mesa temporal cumple todo eso también (según mi opinión).
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á utilizando 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 servidores de bases de datos múltiples si no se manejan adecuadamente], pero depende de lo que desee hacer.
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 declaración 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 caché), 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 seguridad, simplicidad y nombres de columna. La seguridad 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.
También me gustaría mencionar que para la mesa temporal,
No puede hacer referencia a una tabla TEMPORAL más de una vez en la misma consulta.
Esto hace que la tabla temporal resulte inconveniente para los casos en los que desee utilizar la unión automática.
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 camino a seguir.