INF: Häufig gestellte Fragen - SQL Server 2000 - Tabellenvariablen

Zusammenfassung

Dieser Artikel beantwortet einige häufig gestellte Fragen (FAQs) im Zusammenhang mit Tabellenvariablen, die in SQL Server 2000 eingeführt wurden.

Zum Lesen der SQL Server-Onlinedokumentation Beschreibung von Tabellenvariablen finden Sie auf der folgenden Microsoft-Website:

Weitere Informationen

F1: Warum wurden Tabellenvariablen eingeführt, wenn bereits temporäre Tabellen zur Verfügung standen?

A1: Tabellenvariablen haben gegenüber temporären Tabellen die folgenden Vorteile:
  • Wie in der SQL Server-Onlinedokumentation "Tabellen" Artikel erwähnt, haben Tabellenvariablen wie lokale Variablen einen definierten Bereich am Ende der sie automatisch gelöscht werden.
  • Tabellenvariablen führen zu weniger Neukompilierung einer gespeicherten Prozedur als temporäre Tabellen.
  • Transaktionen, die zuletzt nur für die Dauer einer Aktualisierung der Tabellenvariable beinhalten. Deshalb benötigen Tabellenvariablen weniger Sperren und Protokollierung von Ressourcen. Da Tabellenvariablen einen beschränkten Bereich haben und nicht Bestandteil der persistenten Datenbank, sind Sie von Transaktionsrollbacks nicht betroffen.
F2: Was bedeutet es, daß Tabellenvariablen führen zu weniger Neukompilierung einer gespeicherten Prozedur als bei temporäre Tabellen?

A2: Der folgende Artikel behandelt einige Gründe Neukompilierung gespeicherte Prozeduren:

243586 Problembehandlung gespeicherte Prozedur Neukompilierung

Abschnitt "Erneuten Kompilierungen aufgrund bestimmter temporäre Tabellenvorgänge" listet auch einige Vorschriften, beispielsweise eine Neukompilierung durch temporäre Tabellen. Diese Einschränkung gelten nicht für Tabellenvariablen.

Tabellenvariablen sind vollständig isoliert gegenüber dem Batch, die sie nicht erstellt ' erfolgen bei CREATE oder ALTER-Anweisung mit einer temporären Tabelle auftreten. Temporäre Tabellen benötigen diese sind Auflösung "damit die Tabelle in einer geschachtelten gespeicherten Prozedur verwiesen werden kann. Tabellenvariablen vermeiden dies vollständig Prozeduren Plan verwenden können, die bereits kompiliert ist, spart Ressourcen zur Verarbeitung der gespeicherten Prozedur.

F3: Was sind die Nachteile haben Tabellenvariablen?

A3: Dies sind einige Nachteile gegenüber temporären Tabellen:
  • Nicht gruppierte Indizes können für Tabellenvariablen als Systemindizes erstellt werden, die für eine PRIMARY- oder UNIQUE-Einschränkung erstellt werden. Die Abfrage-Leistung gegenüber einer temporären Tabelle mit nicht gruppierten Indizes bestimmen zu können.
  • Tabellenvariablen beibehalten Statistiken wie temporäre Tabellen nicht. Statistiken können für Tabellenvariablen über automatische Erstellung oder mithilfe der CREATE STATISTICS-Anweisung erstellt werden. Daher kann bei komplexen Abfragen auf große Tabellen das Fehlen von Statistiken den Optimierer den besten Plan für eine Abfrage so beeinflussen die Leistung der Abfrage zu ermitteln abhalten.
  • Die Tabellendefinition kann nach der anfänglichen DECLARE-Anweisung geändert werden.
  • Tabellenvariablen können nicht in einer INSERT EXEC oder SELECT INTO-Anweisung verwendet werden.
  • CHECK-Integritätsregeln, Standardwerte und berechnete Spalten in der Tabelle Typdeklaration können nicht Funktionen aufrufen.
  • Sie können der EXEC-Anweisung oder Sp_executesql gespeicherten Prozedur eine dynamische SQL Server-Abfrage ausführen, die eine Tabellenvariable verweist, wenn die Tabellenvariable außerhalb der EXEC-Anweisung oder Sp_executesql gespeicherten Prozedur erstellt wurde. Außerhalb des Bereichs der Tabellenvariable wäre Verfahren, da Tabellenvariablen in ihren lokalen Gültigkeitsbereich einer EXEC-Anweisung und eine gespeicherte Sp_executesql verwiesen werden können. Jedoch die Tabellenvariable erstellen und verarbeiten Sie alle in der EXEC-Anweisung oder Sp_executesql gespeicherte Prozedur, weil dann in der EXEC-Anweisung oder Sp_executesql ist lokale Tabellenvariablen gespeicherte Prozedur.
F4: Sind Tabellenvariablen nur im Arbeitsspeicher befindliche Strukturen, die gewährleistet eine bessere Leistung als temporären oder permanenten Tabellen in einer Datenbank verwaltet werden, die auf der Festplatte?

A4: Eine Tabellenvariable ist keine nur im Arbeitsspeicher befindliche Struktur. Da eine Tabellenvariable mehr Daten als in den Speicher passen enthalten kann, muss ein Platz auf dem Datenträger zu speichern. Tabellenvariablen werden wie temporäre Tabellen der Datenbank Tempdb erstellt. Wenn Speicher verfügbar ist, sowohl Tabellenvariablen und temporäre Tabellen erstellt und im Speicher (Datencache) verarbeitet.

F5: Muss ich Tabellenvariablen anstelle von temporären Tabellen verwenden?

A5: Diese drei Faktoren abhängig:
  • Die Anzahl der Zeilen, die in die Tabelle eingefügt werden.
  • Die Anzahl von erneuten Kompilierungen aus die Abfrage gespeichert.
  • Der Typ der Abfragen und deren Abhängigkeit von Indizes und Statistiken bei der Leistung.
In einigen Situationen ist es hilfreich, eine gespeicherte Prozedur mit temporären Tabellen in kleinere gespeicherte Prozeduren aufteilen, sodass Neukompilierung für kleinere Einheiten stattfindet.

Im Allgemeinen verwenden Sie Tabellenvariablen, wann immer möglich, außer wenn es einem großem Datenvolumen und wiederholter Verwendung der Tabelle. In diesem Fall können Sie Indizes für temporäre Tabelle Abfrageperformance zu erstellen. Jedes Szenario kann jedoch abweichen. Microsoft empfiehlt, dass Sie testen, ob Tabellenvariablen hilfreicher als temporäre Tabellen für eine bestimmte Abfrage oder gespeicherte Prozedur sind.
Eigenschaften

Artikelnummer: 305977 – Letzte Überarbeitung: 20.01.2017 – Revision: 2

Feedback