ProgramaciónDesarrollador Backend

¿Cuáles son las características de las tablas temporales (Temporary Tables) en SQL, cómo se deben utilizar correctamente y en qué se diferencian de las variables de tabla (Table Variables)?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

Las tablas temporales (Temporary Tables) y las variables de tabla (Table Variables) son diferentes mecanismos para almacenar datos intermedios mientras se ejecuta una consulta o procedimiento.

Tablas temporales (por ejemplo, #TempTable en MS SQL):

  • Se almacenan en la base de datos temporal tempdb.
  • Son visibles en la sesión o conexión actual.
  • Permiten crear índices, restricciones y pueden ser parte de transacciones.
  • Se utilizan al trabajar con grandes volúmenes de datos y procesos complejos.

Variables de tabla (por ejemplo, @MyTable):

  • Tienen un ámbito dentro del batch/procedimiento/función.
  • A menudo se optimizan para conjuntos pequeños de datos.
  • No se pueden crear índices completos sobre ellas (excepto PRIMARY KEY/UNIQUE).
  • Tienen menos probabilidad de ser bloqueadas y participan en transacciones de manera diferente.

Ejemplo:

-- Tabla temporal CREATE TABLE #Temp( Id INT, Name NVARCHAR(100) ); INSERT INTO #Temp VALUES (1, 'Test'); SELECT * FROM #Temp; -- Variable de tabla DECLARE @MyTable TABLE (Id INT, Name NVARCHAR(100)); INSERT INTO @MyTable VALUES (2, 'Sample'); SELECT * FROM @MyTable;

Pregunta trampa.

¿Cuál es la diferencia entre la duración y el ámbito de vida de la tabla temporal #TempTable y la tabla temporal global ##GlobalTempTable?

Respuesta correcta:

  • #TempTable solo es visible en la sesión actual, se destruye al cerrar la conexión o por un DROP explícito.
  • ##GlobalTempTable es accesible a todas las sesiones hasta que se cierre la última sesión que utilizó la tabla o se ejecute un DROP explícito. Desaparece solo después de cerrar la última conexión que la utiliza.
-- Tabla temporal global CREATE TABLE ##GlobalTemp (Id INT);

Ejemplos de errores reales por desconocer los matices del tema.


Historia

En un proyecto de procesamiento de grandes informes, se utilizó una variable de tabla para almacenar temporalmente cientos de miles de filas. Resultado: caída drástica del rendimiento, ya que el optimizador sobreestimó el costo de las consultas y comenzó a utilizar planes inadecuados. Reemplazarla por una tabla temporal en tempdb resultó en una mejora significativa en el tiempo.


Historia

En un procedimiento, olvidaron eliminar explícitamente la tabla temporal. En ejecuciones de batch repetidas en una misma sesión, se produjeron errores: "el objeto ya existe". El problema desapareció después de agregar un DROP TABLE antes de crearla.


Historia

Utilizaron una tabla temporal global para la interacción entre procesos de informes. No tuvieron en cuenta que la ejecución simultánea hacía que el comportamiento fuera impredecible, ya que las sesiones competían por los mismos datos. Se tomó la decisión de reemplazar la tabla global por tablas temporales individuales para cada sesión.