2010-06-30 11 views
5

Questo SO post descrive alcuni vantaggi in termini di prestazioni tra tabelle derivate e tabelle temporanee.Quando non è appropriato usare le tabelle derivate?

Diverse dalle prestazioni, quali situazioni esistono per le quali una tabella derivata non sarebbe appropriata.

Una risposta per post con un esempio sarebbe utile.

+0

Che [questione è aggiunto per SQL Server] (http : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-or-temporary-tables), quindi le informazioni dovrebbero essere considerate specifiche per esso e non per tutti i database. –

risposta

1

Preferirei fare un self-join su una tabella temporanea di una tabella derivata.

CREATE TEMPORARY TABLE foo AS SELECT ...; 

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

Versus utilizzando una tabella derivata, in cui si deve scrivere l'intera query due volte:

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

Ma un'altra soluzione è quella di utilizzare espressioni di tabella comuni che sono leggermente differenti da tabelle derivate:

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

Se si utilizza una marca di database che supporta questa sintassi (Microsoft, Oracle, IBM, PostgreSQL).

1

L'ambito potrebbe essere uno. Penso che le tabelle temporanee possano essere rese accessibili ad altre transazioni/processi, ecc. Le tabelle derivate sono limitate al blocco in cui sono dichiarate.

1

Se è necessario accedere ai dati nella tabella temporanea in più query potrebbe essere meno costoso per evitare di generare i dati temporanei ripetutamente:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

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

-- sometime later 

SELECT ... FROM foo WHERE ...different conditions...; 
Problemi correlati