SQL Server: Werden Variablen vom Typ Table im Speicher gelagert?

Ich hatte lange daran geglaubt, dass es ein Mythos ist, aber eine Variable vom Typ Table ist wirklich eine Variable! Wie ist es möglich virtuell eine fast unbeschränkte Quantität von Angaben zu speichern?  Dies kann also nicht nur im Speicher gelagert werden.

Nehmt bitte zur Kenntnis, dass aus dem folgenden Grund die Datenbank-Engine beschließen kann, LOBs (Large Objects: text, ntext, image, varbinary (max), varchar (max)) so  zu speichern/lagern.

Wo also werden diese Elemente gespeichert? Im folgenden ein kleiner Test:

  1. DECLARE @meineVariable TABLE (x INT)
  2.  
  3. INSERT INTO @meineVariable VALUES(1)
  4.  
  5. WAITFOR DELAY '00:00:30'

Während die Abfrage ausgeführt wir, gehen wir im Management Studio auf die "tempdb"-Datenbank:

Table Variable

Hmm ja, dieses Element mit dem seltsamen Namen (#52593CB8), ist wirklich unsere Typenvariable. Man kann gut am Prefix (#) erkennen das es sich um eine temporäre Tabelle handelt und außerdem wird eine einmalige Seriennummer dieser Variable ausgegeben.

Die Variablen des Tabellentyps werden also in tempdb ausgelagert.

Einen Kommentar schreiben