Las tablas temporales son más útiles para un proceso por lotes complejo como un informe o un trabajo ETL. En general, esperaría usarlos con bastante poca frecuencia en una aplicación transaccional.
Si realiza una consulta compleja con una combinación que implica varias tablas grandes (tal vez para un informe), el optimizador de consultas no puede optimizar esto en un hit, por lo que las tablas temporales se convierten en una ganancia. Descomponen consulta en una serie de más simples que le dan al optimizador de consultas menos oportunidades de arruinar el plan. En ocasiones, tiene una operación que no se puede realizar en una sola declaración SQL, por lo que son necesarios varios pasos para procesarla. Una vez más, estamos hablando de manipulaciones más complejas aquí.
También puede crear una tabla temporal para un resultado intermedio y luego indexar la tabla, posiblemente incluso colocando un índice agrupado en ella para optimizar una consulta posterior. Esta también puede ser una manera rápida y sucia de optimizar una consulta de informe en un sistema donde no se le permite agregar índices al esquema de la base de datos. SELECT INTO es útil para este tipo de operación ya que está mínimamente registrado (y por lo tanto rápido) y no requiere alinear las columnas de una selección e inserción.
Otras razones pueden incluir la extracción de datos de campos XML utilizando las solicitudes CROSS APPLY y xpath. En general, es mucho más eficiente extraer esto en una tabla temporal y luego trabajar en la tabla temporal. También son mucho más rápidos que los CTE para algunas tareas, ya que materializan los resultados de la consulta en lugar de volver a evaluar la consulta.
Una cosa a tener en cuenta es que las tablas temporales son exactamente la misma estructura que usa el motor de consulta para almacenar los resultados de las uniones intermedias, por lo que no hay una penalización de rendimiento al usarlas. Las tablas temporales también permiten tareas de varias fases usando operaciones de conjunto y hacen que los cursores sean casi (no del todo, pero casi) innecesarios en el código T-SQL.
'Code Smell' es una exageración, pero si veo muchas operaciones simples que involucran tablas temporales, me pregunto qué está pasando.
que era mi opinión también, pero me preguntaba si estaba siendo un snob! –
Una cosa a tener en cuenta es que el diseño de base de datos incorrecta es mucho más común de lo que piensas. Si desea experimentar las alegrías de lidiar con las consecuencias del diseño de bases de datos defectuosas, intente trabajar en data warehousing durante algunos años. – ConcernedOfTunbridgeWells