ProgrammatieBackend ontwikkelaar

Wat zijn de kenmerken van tijdelijke tabellen (Temporary Tables) in SQL, hoe gebruik je ze correct en wat is het verschil met tabelvariabelen (Table Variables)?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Tijdelijke tabellen (Temporary Tables) en tabelvariabelen (Table Variables) zijn verschillende mechanismen voor het opslaan van tussentijdse gegevens tijdens de uitvoering van een query of procedure.

Tijdelijke tabellen (bijvoorbeeld #TempTable in MS SQL):

  • Worden opgeslagen in de tijdelijke database tempdb.
  • Zichtbaar in de huidige sessie of verbinding.
  • Staan toe om indexen en beperkingen te maken, kunnen deel uitmaken van transacties.
  • Worden gebruikt bij het werken met grote hoeveelheden gegevens en complexe bewerkingen.

Tabelvariabelen (bijvoorbeeld @MyTable):

  • Hebben een zichtbaarheid binnen een batch/procedure/functie.
  • Worden vaker geoptimaliseerd voor kleine datasets.
  • Er kunnen geen volledige indexen op worden gemaakt (behalve PRIMARY KEY/UNIQUE).
  • Hebben een lagere kans op blokkering en doen anders mee in transacties.

Voorbeeld:

-- Tijdelijke tabel CREATE TABLE #Temp( Id INT, Name NVARCHAR(100) ); INSERT INTO #Temp VALUES (1, 'Test'); SELECT * FROM #Temp; -- Tabelvariabele DECLARE @MyTable TABLE (Id INT, Name NVARCHAR(100)); INSERT INTO @MyTable VALUES (2, 'Sample'); SELECT * FROM @MyTable;

Vervolg vraag.

Wat is het verschil tussen de levensduur en zichtbaarheid van tijdelijke tabel #TempTable en globale tijdelijke tabel ##GlobalTempTable?

Juiste antwoord:

  • #TempTable is alleen zichtbaar in de huidige sessie, wordt vernietigd bij het sluiten van de verbinding of expliciete DROP.
  • ##GlobalTempTable is beschikbaar voor alle sessies totdat de laatste sessie die de tabel heeft gebruikt, wordt gesloten, of expliciete DROP. Het verdwijnt pas na het sluiten van de laatste verbinding die het gebruikt.
-- Globale tijdelijke tabel CREATE TABLE ##GlobalTemp (Id INT);

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp.


Verhaal

In een project voor het verwerken van grote rapporten werd een tabelvariabele gebruikt voor tijdelijke opslag van honderden duizenden rijen. Resultaat: een scherpe daling van de prestaties, omdat de optimizer de kosten van de queries overschatte en begon met het gebruiken van slecht passende plannen. Vervanging door een tijdelijke tabel in tempdb resulteerde in een aanzienlijke tijdswinst.


Verhaal

In een procedure vergaten ze de tijdelijke tabel expliciet te verwijderen. Bij herhaalde batchuitvoeringen in dezelfde sessie traden fouten op: "object bestaat al". Het probleem verdween na het toevoegen van DROP TABLE vóór het maken.


Verhaal

Een globale tijdelijke tabel werd gebruikt voor inter-process communicatie van rapporten. Men hield er geen rekening mee dat gelijktijdige uitvoering het gedrag onvoorspelbaar maakte — sessies conflicteerden over dezelfde gegevens. Er werd besloten om de globale tabel te vervangen door individuele tijdelijke tabellen voor elke sessie.