Domanda

SO inviare dettagli un po ' vantaggi in termini di prestazioni per quanto riguarda Derivato vs tabelle temporanee.

Oltre a prestazioni, quali situazioni esistono per i quali una tabella derivata non sarebbe appropriato.

Una risposta per ogni post con un esempio sarebbe utile.

È stato utile?

Soluzione

io preferirei fare un self-join in 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 diversi 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).

Altri suggerimenti

Ambito di applicazione potrebbe essere uno. Penso tabelle temporanee possono essere resi accessibili ad altre operazioni / processi, ecc tabelle derivate sono limitati al blocco in cui sono dichiarate.

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

CREATE TEMPORARY TABLE foo AS SELECT ...;

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

-- sometime later

SELECT ... FROM foo WHERE ...different conditions...;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top