Microsoft SQL Server: Die Sequenzierungslösung

Die neue Microsoft SQL Server-Plattform unterstützt die Sequenzierung – eine große Hilfe für alle SQL-Administratoren.

Denny Cherry

Es ist eine willkommene Ergänzung neue Microsoft SQL Server, in die erste öffentliche Betaversion von SQL Server "Denali." vorhanden. Viele Mitglieder der Community SQL Server haben wurde anfordern Sequenzierung Features seit Jahren, und sie gehen schließlich zur Verfügung stehen.

Sequenzen sind im Prinzip wie die IDENTITY-Eigenschaft, die Sie auf eine Spalte einer Tabelle platzieren können. Der große Unterschied zwischen Identität und Sequenzen ist, dass Sequenzen zu einer bestimmten Tabelle gebunden sind. In der Tat, müssen Sie eine Tabelle verwenden. Eine einzelne Datenbank kann mehrere Sequenzen, begrenzt nur durch die Gesamtzahl der Objekte innerhalb der Datenbank enthalten.

Erstellen einer Sequenz

Wenn Sie eine Sequenz zu erstellen, müssen Sie angeben, wie oder wo die Datenbank Sequenz verwendet wird. Die Sequenz ist ein völlig unabhängig von anderen Objekten innerhalb der Datenbank-Objekt. Es gibt mehrere Optionen, die Sie benötigen jedoch angeben.

Die erste ist die MINVALUE-Option, die der niedrigste Wert ist, die, den die Sequenz ausstellen kann. Der nächste ist die MAXVALUE-Option, die den höchsten Wert ist, die, den die Sequenz ausstellen kann. Die nächste Option ist der START mit Option der erste Wert, die, den es ausgestellt wird. Wenn die START mit Option weggelassen wird, verwendet es für den ersten Wert MINVALUE. Hier sind die MINVALUE, MAXVALUE und beginnen mit Optionen in einer Anweisung für grundlegende SEQUENZ erstellen:

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 START WITH 1000

Wenn Sie einen MINVALUE oder MAXVALUE angeben möchten, können diese Zeilen aus der SEQUENZ erstellen-Anweisung weglassen oder die Nr. MINVALUE und MAXVALUE Nr. Schlüsselwörter verwenden, wie hier gezeigt:

CREATE SEQUENCE dbo.MySequence AS INT NO MINVALUE NO MAXVALUE START WITH 1000

Dies ist die Anweisung SEQUENZ erstellen, ohne einen angegebenen Wert für minimum oder maximum. Allerdings sollten Sie für eine Reihe von unterschiedlichen Gründen die MINVALUE und der Wert START mit angeben.

Erstens gibt es nichts, die besagt, dass eine Sequenz vorwärts gehen oder Wertsteigerung mit Inkrement muss. Sie können eine Sequenz, die eine hohe Anzahl beginnt und ruft bei jedem eine neue Nummer hinzufügen niedriger. Ein weiterer Grund, dass beide Werte vorhanden ist, dass eine Sequenz zurück an den Anfang der Sequenz Zyklus kann bei der Ausführung von Zahlen.

Sie möchten möglicherweise erstellen eine Sequenz mit einem Bereich von 1 bis 10.000, aber mit 1.000 und bei der Ausführung von Zahlen aus einer über Start gestartet. Um die Reihenfolge bei der Ausführung von Zahlen an den Anfang zurück-Zyklus zu machen, geben Sie das Schlüsselwort Zyklus beim Erstellen der Sequenz wie im folgenden Code gezeigt (mit Nr. Zyklus-Schlüsselwort können Sie die Sequenz verhindern Radfahren zurück an den Anfang der Sequenz):

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 CYCLE

Hier ist ein weiterer Blick auf diese Art der Sequenz, die mit dem Schlüsselwort Nr. Zyklus:

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 NO CYCLE

Wie Sie in diesen Beispielen sehen können, wird der Datentyp die Sequenz verwendete nach dem AS-Schlüsselwort angegeben, die der INT oder INTEGER-Datentyp ist. Andere Datentypen Wert stehen zur Auswahl TINYINT, SMALLINT, BIGINT oder benutzerdefinierten Datentyp, der akzeptablen Datentypen basiert.

Neben dieser Datentypen ganze Zahl können Sie auch die DECIMAL und NUMERIC-Daten, sofern sie mit einer Skala von 0 (null) definiert sind. Ist kein Datentyp angegeben, wird die Sequenz der BIGINT-Datentyp standardmäßig die Probleme verursachen, wenn die Tabelle eine Spalte vom Typ INTEGER Daten verfügt, in denen der Wert gespeichert wird.

Die nächste Einstellung, die einer der wichtigsten ist, ist CACHE. Cacheeinstellung erzählt SQL Server – bei seiner Verwendung der Sequenz – wie viele Werte zum Laden in den Speicher jeder Zeit es Anforderungen neuer Werte. Die Funktionsweise der CACHE ist der große Unterschied zwischen der Funktionsweise von Sequenzen und die IDENTITY-Eigenschaft.

Mit der IDENTITY-Eigenschaft verwaltet SQL Server einen Cache von 20 Werten im Speicher, die Sie anpassen können. Das Performance-Problem mit der IDENTITY-Eigenschaft ist, dass jedes Mal Sie eine neue Zeile in die Tabelle einfügen und die IDENTITY-Eigenschaft gibt einen Wert, die Tatsache, dass dieser Wert verwendet wurde in der SQL Server-Datenbank geschrieben wird. Je schneller die Zeilen in die Tabelle geladen werden, desto schneller SQL Server müssen diese Metadaten in die Datenbank schreiben.

Im Gegensatz zu der IDENTITY-Eigenschaft schreibt eine Folge nur in der Datenbank-Metadaten, die die Werte ausgegeben wurden, wenn sie zuerst in den Cache gestellt werden. Beispielsweise, wenn eine Sequenz in Batches von 1.000 Zeilen ausgegeben, wenn der erste Batch den Wert von 1.000 ausgegeben wird ist in den Metadaten geschrieben. Wenn der Wert der 1.001 benötigt wird, einer anderen 1.000 Werte werden in den Cache geladen und der Wert von 2.000 auf die Metadaten geschrieben ist. Dadurch erheblich reduziert die Anzahl der Metadaten-Schreibvorgänge und Datenbank-Performance verbessern kann.

Ein Nachteil ist, dass Lücken in den Werten, die durch die Reihenfolge der jedem Neustart SQL Server ausgestellt werden. Wenn die Datenbank heruntergefahren wird, wird es nicht den letzten Wert tatsächlich verwendet, um Metadaten schreiben. Also wenn der letzte Wert vor dem Herunterfahren verwendet 1.005 wurde (und wir die gleichen Einstellungen wie zuvor beschrieben haben), wenn die nächste Zeile eingefügt wird, nachdem die Datenbank wieder online geschaltet wird, wird der nächste Wert verwendet 2.000 sein.

Dies könnte eine Sequenz von Zahlen viel schneller als ein Identitätswert ausgeführt. Auch könnte es Managern, verärgert, dass Werte fehlen, in diesem Fall müssen sie einfach darüber zu erhalten und akzeptieren sind, dass die fehlende Zahlen.

Benötigen Sie SQL Server jeden möglichen Wert verwenden, konfigurieren Sie eine Cacheeinstellung NO-Cache. Dadurch wird die Sequenz, die ähnlich wie die IDENTITY-Eigenschaft zu arbeiten. Es wird jedoch die Sequenz-Leistung aufgrund der schreibt zusätzliche Metadaten auswirken.

Um die Menge von Zahlen zu überspringen zu steuern, verwenden Sie die Schrittweite durch Einstellung der Sequenz. Der Wert Schrittweite von kann jede ganze Zahl positiv oder negativ, obwohl ein Wert eines wahrscheinlich die am häufigsten verwendeten Schrittweite. Diese verwendet das Schlüsselwort Schrittweite durch, in der Anweisung SEQUENZ erstellen:

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 INCREMENT BY 3 CYCLE

Unter Verwendung einer Sequenz

Es gibt mehrere Möglichkeiten, eine Sequenz verwenden. Sie können diese als Standardwert für eine Tabelle, zuweisen, so dass die Spaltenwerte automatisch angegeben werden, wenn Sie Zeilen in die Tabelle einfügen. Dies funktioniert weitgehend wie eine Tabelle mit der IDENTITY-Eigenschaft konfiguriert.

Die andere Option ist, ziehen den nächsten Wert aus der Sequenz von innerhalb einer gespeicherten Prozedur (oder anderen Code T/SQL). Auf diese Weise können Sie es während der Verarbeitung der gespeicherten Prozedur (oder anderen Code T/SQL) verwenden.

Beim Angeben der Sequenz als ein Spaltenwert automatisch hinzugefügt wird, wenn einer Tabelle neue Zeilen hinzugefügt, setzen Sie den Standardwert der Spalte auf den nächsten Wert aus der Sequenz ziehen, wie hier gezeigt:

CREATE TABLE dbo.YourTable (YourTableId INT NOT NULL, AnotherColumn VARCHAR(10)) GO ALTER TABLE dbo.YourTable ADD DEFAULT NEXT VALUE FOR dbo.MySequence FOR YourTableId GO

Dies weist die Werte aus einer Einschränkung, wenn Zeilen in eine Tabelle, genauso wie die IDENTITY-Eigenschaft eingefügt werden.

Eines der Dinge, die Sie mit einer Sequenz tun können, die Sie mit der IDENTITY-Eigenschaft nicht ordentlich ist Werte an der Vorderseite des Wertes aus der Sequenz angefügt. Benötigen Sie den Buchstaben "A" vor der Werte setzen, die Sie aus der Sequenz erhalten möchten, können Sie leicht dazu durch die Ausgabe von der Sequenz in eine Zeichenfolge umwandeln. Hängen Sie den Wert dann in den Vordergrund, wie hier gezeigt:

CREATE TABLE dbo.YourTable (YourTableId INT NOT NULL, AnotherColumn VARCHAR(10)) GO ALTER TABLE dbo.YourTable ADD DEFAULT ‘A’ + CAST(NEXT VALUE FOR dbo.MySequence as VARCHAR(10)) FOR YourTableId GO

Dies weist die Werte aus einer Einschränkung, wenn Zeilen in der gleichen Weise wie die IDENTITY-Eigenschaft, aber beim Anfügen einer Zeichenfolge an den Anfang des abgerufenen Werts in eine Tabelle eingefügt werden.

Werte aus einer Sequenz in normale T/SQL Code aufrufen (ob aus einer gespeicherten Prozedur oder nicht) erfolgt im Wesentlichen die gleiche Weise. Verwenden Sie die Syntax der nächste Wert, und geben Sie den Namen der Sequenz, aus der Sie den nächsten Wert abrufen möchten. Dies ruft den nächsten verfügbaren Wert aus einer Sequenz:

DECLARE @YourId INT SET @YourId = NEXT VALUE FOR dbo.MySequence

Eine weitere gute Möglichkeit, um eine Sequenz zu verwenden ist, damit sie die Zeilen in einem Rowset Zeilennummern zuweisen. Verwenden Sie die Syntax die nächste Wert als Teil der select-Anweisung wie im folgenden Beispiel gezeigt:

SELECT NEXT VALUE FOR dbo.MySequence, * FROM sys.objects

Dies weist einen Wert aus einer Sequenz auf jede Zeile in einem Recordset.

Wie Sie sehen können, ist dieses neue Feature der Sequenzierung ein leistungsfähiges Tool. Die Anzahl und Vielfalt von Verwendungen für Sequenzen in SQL Server sind nur durch Ihre Vorstellungskraft begrenzt.

Denny Cherry

**Denny Cherry**verfügt über mehr als einem Jahrzehnt der Verwaltung von SQL Server auftreten. Seine Fachgebiete umfassen Systemarchitektur, Performance-tuning, Replikation und Problembehandlung. Er enthält mehrere Zertifizierungen im Zusammenhang mit SQL Server, einschließlich der Microsoft Certified Master für SQL Server 2008. Er hat seit mehreren Jahren ein Microsoft SQL Server-MVP und hat zahlreiche technische Artikel und Bücher über die SQL Server-Management und Integration von SQL Server mit anderen Technologien geschrieben.

Verwandter Inhalt