2010-06-30 23 views
5

Este SO post detalla algunos beneficios en el rendimiento con respecto a las tablas Derivadas vs. Temporales.¿Cuándo no es apropiado usar tablas derivadas?

Aparte del rendimiento, qué situaciones existen para las cuales una tabla Derivada no sería apropiada.

Una respuesta por publicación con un ejemplo sería útil.

+0

Eso [cuestión está marcado para SQL Server] (http : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-or-temporary-tables), por lo que la información debe considerarse específica para él y no para todas las bases de datos. –

Respuesta

1

Preferiría hacer una auto unión en una tabla temporal que una tabla derivada.

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

Versus usando una tabla derivada, donde usted tiene que escribir toda la consulta dos veces:

SELECT ... 
FROM (SELECT ...) 
JOIN (SELECT ...) ON ...conditions...; 

Sin embargo, otra solución es utilizar expresiones de tabla comunes que son ligeramente diferentes de tablas derivadas:

WITH foo AS (SELECT ...) 
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

Siempre que utilice una marca de base de datos que admita esta sintaxis (Microsoft, Oracle, IBM, PostgreSQL).

1

Alcance podría ser uno. Creo que las tablas temporales pueden hacerse accesibles para otras transacciones/procesos, etc. Las tablas derivadas están limitadas al bloque en el que están declaradas.

1

Si tiene que acceder a los datos en la tabla temporal en varias consultas podría ser menos costoso para evitar la generación de los datos temporales en repetidas ocasiones:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo WHERE ...conditions...; 

-- sometime later 

SELECT ... FROM foo WHERE ...different conditions...; 
Cuestiones relacionadas