ProgrammazioneSviluppatore Backend

Quali sono le caratteristiche delle tabelle temporanee (Temporary Tables) in SQL, come utilizzarle correttamente e in cosa si differenziano dalle variabili di tabella (Table Variables)?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

Le tabelle temporanee (Temporary Tables) e le variabili di tabella (Table Variables) sono meccanismi diversi per conservare dati intermedi durante l'esecuzione di una query o di una procedura.

Tabelle temporanee (ad esempio, #TempTable in MS SQL):

  • Sono memorizzate nel database temporaneo tempdb.
  • Sono visibili nella sessione o connessione corrente.
  • Consentono di creare indici, vincoli e possono far parte di transazioni.
  • Sono utilizzate per lavorare con grandi quantità di dati e elaborazioni complesse.

Variabili di tabella (ad esempio, @MyTable):

  • Hanno un ambito di visibilità all'interno di batch/procedure/funzioni.
  • Vengono spesso ottimizzate per piccoli set di dati.
  • Non possono avere indici completi (eccetto PRIMARY KEY/UNIQUE).
  • Hanno una minore probabilità di essere bloccate e partecipano alle transazioni in modo diverso.

Esempio:

-- Tabella temporanea CREATE TABLE #Temp( Id INT, Name NVARCHAR(100) ); INSERT INTO #Temp VALUES (1, 'Test'); SELECT * FROM #Temp; -- Variabile di tabella DECLARE @MyTable TABLE (Id INT, Name NVARCHAR(100)); INSERT INTO @MyTable VALUES (2, 'Sample'); SELECT * FROM @MyTable;

Domanda insidiosa.

Qual è la differenza tra la durata e l'ambito di visibilità di una tabella temporanea #TempTable e di una tabella temporanea globale ##GlobalTempTable?

Risposta corretta:

  • #TempTable è visibile solo nella sessione corrente, viene distrutta alla chiusura della connessione o con un DROP esplicito.
  • ##GlobalTempTable è accessibile da tutte le sessioni fino alla chiusura dell'ultima sessione che ha utilizzato la tabella o con un DROP esplicito. Essa scompare solo dopo la chiusura dell'ultima connessione che la utilizza.
-- Tabella temporanea globale CREATE TABLE ##GlobalTemp (Id INT);

Esempi di errori reali dovuti alla mancata conoscenza delle sfumature dell'argomento.


Storia

In un progetto di elaborazione di grandi report, è stata utilizzata una variabile di tabella per la conservazione temporanea di centinaia di migliaia di righe. Risultato: un drastico calo delle prestazioni, poiché l'ottimizzatore ha sovrastimato il costo delle query e ha iniziato a utilizzare piani poco adatti. La sostituzione con una tabella temporanea in tempdb ha portato a un significativo guadagno di tempo.


Storia

In una procedura è stata dimenticata l'eliminazione esplicita della tabella temporanea. Durante le ripetute esecuzioni di batch nella stessa sessione, si sono verificate errori: "l'oggetto esiste già". Il problema è scomparso dopo l'aggiunta di DROP TABLE prima della creazione.


Storia

È stata utilizzata una tabella temporanea globale per la comunicazione tra processi dei report. Non è stato considerato che l'esecuzione simultanea rendeva il comportamento imprevedibile, poiché le sessioni conflittavano per gli stessi dati. È stata presa la decisione di sostituire la tabella globale con tabelle temporanee individuali per ciascuna sessione.