12 Stimmen

Tabellenvariablen erstellt und im Speicher oder in tempdb gehalten?

Werden Tabellenvariablen im Speicher oder in der tempdb erstellt? Dasselbe gilt für kurze temporäre Tabellen?

14voto

SQLMenace Punkte 128184

Es wird eine temporäre Tabelle in tempdb erstellt, die Sie leicht überprüfen können, indem Sie die Tabelle sysobjects in tempdb abfragen

Beispiel

create table #test (Item char(1),  TimeSold varchar(20))

select * from tempdb.sys.sysobjects
where name like '#test%'

sollten Sie etwas mit einem Namen wie #test_______000000000905 sehen, dann aber mit mehr Unterstrichen

Wenn Sie prüfen müssen, ob eine temporäre Tabelle existiert, lesen Sie auch Wie prüft man, ob eine temporäre Tabelle in SQL Server vorhanden ist?

Die Struktur der Tabellenvariable wird ebenfalls in tempdb erstellt. Um die Tabellenvariable zu sehen, könnten Sie so vorgehen, aber es gibt keine Garantie, dass sich nicht jemand vor Ihnen eingeschlichen hat, als er seine Tabellenvariable erstellte. Der Name der Tabellenvariable lautet etwa #7BB1235D

    declare @v table(id int) 
select top 1 * from tempdb.sys.sysobjects
where name like '#%'
and name not like '%[_]%'
order by crdate desc
select * from @v

Für weitere Informationen siehe hier: http://support.microsoft.com/kb/305977

3voto

Joe Stefanelli Punkte 128819

Nach meinem Verständnis wird zumindest die Struktur einer Tabellenvariablen immer in TempDB erstellt. Dann, wenn von SQLMenace aufgezeigt können die Daten überschwappen oder auch nicht.

Per dieser Microsoft Knowledge Base Artikel :

Eine Tabellenvariable ist kein reiner Speicher Struktur. Da eine Tabellenvariable mehr Daten enthalten kann, als in den Speicher passen Speicher passt, muss sie einen Platz auf der Festplatte haben um Daten zu speichern. Tabellenvariablen werden in der tempdb-Datenbank erstellt, ähnlich wie wie temporäre Tabellen. Wenn Speicher verfügbar ist, werden sowohl Tabellenvariablen als auch temporäre Tabellen erstellt und im Speicher verarbeitet (Daten Zwischenspeicher).

2voto

Alexander Sigachov Punkte 1531

In MS SQL 2014 wurde ein spezieller Typ von Tabellenvariablen eingeführt: "Memory-Optimized Table Variables". Und sie verwenden keine tempdb.

参照 https://msdn.microsoft.com/en-us/library/dn535766.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X