Microsoft SQL Server: La soluzione di sequenziazione

La nuova piattaforma Microsoft SQL Server include la funzionalità di sequenziazione, che dovrebbe dimostrarsi di enorme aiuto per gli amministratori SQL in qualsiasi situazione.

Denny Cherry

Non vi è un grande entusiasmo nuovo per Microsoft SQL Server, presente nella prima versione beta pubblica di SQL Server, "Installazione". Molti membri della Comunità SQL Server sono state richiedere funzionalità sequencing per anni, e infine dovrà essere disponibile.

Le sequenze sono concettualmente simile alla proprietà di identità, è possibile posizionare su una colonna di una tabella. La grande differenza tra identità e le sequenze è che le sequenze non sono associate a una tabella specifica. In realtà, non è necessario utilizzare una tabella affatto. Un singolo database può includere più sequenze, limitate solo dal numero totale di oggetti all'interno del database.

Creazione di una sequenza

Quando si crea una sequenza, non è necessario specificare la modalità o in cui il database verrà utilizzato tale sequenza. La sequenza è un oggetto totalmente indipendente da altri oggetti all'interno del database. Sono disponibili diverse opzioni, che sarà necessario specificare, tuttavia.

Il primo è l'opzione MINVALUE, vale a dire il valore più basso che possibile emettere la sequenza. La successiva è l'opzione MAXVALUE, vale a dire il valore più alto che possibile emettere la sequenza. L'opzione successiva è l'opzione inizia con, vale a dire il primo valore, verrà rilasciati. Quando l'opzione START WITH viene omessa, MINVALUE verranno utilizzate per il primo valore. Ecco le opzioni MINVALUE, MAXVALUE e inizia con in un'istruzione CREATE sequenza base:

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

Se non si desidera specificare un MINVALUE o MAXVALUE, è possibile omettere queste righe dall'istruzione CREATE sequenza oppure utilizzare le parole chiave NO MINVALUE e MAXVALUE NO, come illustrato di seguito:

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

Questo è l'istruzione CREATE sequenza senza un valore minimo o massimo specificato. Tuttavia, è necessario specificare nel MINVALUE e il valore inizia con un paio di motivi diversi.

In primo luogo, non c'è niente che afferma che una sequenza deve andare avanti o aumentino di valore con ogni incremento. È possibile una sequenza che inizia da un numero elevato e ottiene inferiore ogni volta che si aggiunge un nuovo numero. Entrambi i valori presenti in un'altra ragione è che una sequenza potete ciclo Torna all'inizio della sequenza quando essa ha esaurito i numeri.

Potrebbe voler creare una sequenza con un intervallo da 1 a 10.000, ma inizia con 1.000 e quando si esaurisce numeri che ricomincia da uno. Per rendere la sequenza Torna all'inizio del ciclo quando i numeri si esaurisce, specificare la parola chiave ciclo durante la creazione della sequenza, come illustrato nel codice riportato di seguito (è possibile utilizzare la parola chiave NO ciclo per impedire la sequenza di un ciclo Torna all'inizio della sequenza):

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

Ecco un altro sguardo questo tipo di sequenza, utilizzando la parola chiave NO ciclo:

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

Come si vede in questi esempi, la sequenza utilizzerà il tipo di dati è specificato dopo la parola chiave AS, vale a dire il tipo di dati INT o INTEGER. Altre opzioni di valore del tipo di dati includono TINYINT, SMALLINT, BIGINT o qualsiasi tipo di dati definito dall'utente che si basa sui tipi di dati accettabili.

Oltre a questi tipi di dati numero intero, è possibile utilizzare i dati DECIMAL e NUMERIC, purché sono definiti con una scala pari a zero. Se non è specificato alcun tipo di dati, verrà automaticamente la sequenza per il tipo di dati BIGINT, questo potrebbe causare problemi se la tabella include una colonna del tipo di dati INTEGER in cui il valore viene archiviato.

L'impostazione successiva, ovvero una delle più importanti, è nella CACHE. L'impostazione della CACHE indica la SQL Server — quando relativo utilizzando la sequenza, ovvero il numero dei valori per caricare in memoria ogni volta che richieda l'immissione di nuovi. Il funzionamento della CACHE è la grande differenza tra il funzionamento delle sequenze e la proprietà IDENTITY.

Con la proprietà IDENTITY, SQL Server mantiene una cache di 20 valori in memoria, che non è possibile regolare. Il problema di prestazioni con la proprietà IDENTITY è che ogni volta che è possibile inserire una nuova riga nella tabella e la proprietà IDENTITY emette un valore, il fatto che sia stato utilizzato questo valore viene scritto nel database SQL Server. Più velocemente le righe vengono caricate nella tabella, più veloce di SQL Server necessario scrivere i metadati nel database.

A differenza della proprietà IDENTITY, una sequenza scrive solo ai metadati del database con i valori sono stati prelevati al momento della prima messa in cache. Ad esempio, se una sequenza rilasciato righe in batch di 1.000, quando il primo batch viene emesso il valore di 1.000 viene scritto nei metadati. Quando è necessario il valore di 1.001, 1.000 valori di un altro vengono caricati nella cache e viene scritto il valore di 2.000 ai metadati. Questo notevolmente riduce il numero di scritture di metadati e può migliorare le prestazioni del database.

L'unico aspetto negativo di questo è che ci saranno spazi vuoti nei valori emessi dalla sequenza ogni volta che viene riavviato SQL Server. Quando il database viene chiuso, esso non scriverà l'ultimo valore usato per i metadati. In modo che se l'ultimo valore utilizzato prima dell'arresto era 1,005., e ci hanno le stesse impostazioni come descritto in precedenza, quando la riga successiva viene inserita dopo il database ritorna in linea, il valore successivo utilizzato è 2.000.

Ciò potrebbe causare una sequenza esaurire i numeri più velocemente rispetto a un valore IDENTITY. Potrebbe anche far ai responsabili di diventare turbato che valori risultano mancanti, nel qual caso essi dovrai semplicemente ottenere su di esso e si accetta che saranno numeri mancanti.

Se si desidera SQL Server per l'utilizzo di ogni valore possibile, configurare l'impostazione della cache NO CACHE. Questa operazione comporta la sequenza di operazioni molto simile alla proprietà di identità. Tuttavia, influirà sulle prestazioni sequenza a causa di operazioni di scrittura metadati aggiuntivi.

Per controllare la quantità di numeri da ignorare, utilizzare l'impostazione dall'incremento della sequenza. Il valore di incremento può essere qualsiasi numero intero positivo o negativo, anche se un valore di uno è probabile che l'incremento più comune. Si utilizza la parola chiave dall'incremento nell'istruzione CREATE sequenza:

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

Utilizzo di una sequenza

Esistono diversi modi per utilizzare una sequenza. È possibile assegnare loro come valore predefinito della tabella, in modo che i valori di colonna vengono specificati automaticamente quando si inseriscono righe nella tabella. Ciò funziona in modo analogo a una tabella con la proprietà IDENTITY configurata.

L'altra possibilità è quella di inserire il valore successivo della sequenza all'interno di una stored procedure (o altro codice T/SQL). In questo modo, è possibile utilizzarlo durante l'elaborazione di stored procedure (o altro codice T/SQL).

Quando si specifica la sequenza per aggiungere automaticamente come valore di una colonna quando si aggiungono nuove righe a una tabella, impostare il valore predefinito della colonna per estrarre il valore successivo della sequenza, come illustrato di seguito:

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

Questa assegnazione di valori da un vincolo quando vengono inserite righe in una tabella nello stesso modo come la proprietà IDENTITY.

Uno degli aspetti ben che possono essere eseguite con una sequenza che non è possibile eseguire con la proprietà IDENTITY è di accodare valori davanti al valore ricavato dalla sequenza di. Se si desidera inserire la lettera "A" davanti a ricevere dalla sequenza di valori, facilmente farlo eseguendo il cast dell'output dalla sequenza di un valore di tipo carattere. Per aggiungere il valore della parte anteriore, come illustrato di seguito:

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

Questa assegnazione di valori da un vincolo quando vengono inserite righe in una tabella nello stesso modo come la proprietà IDENTITY, ma durante l'aggiunta di un valore di carattere all'inizio del valore recuperato.

Richiama i valori da una sequenza in normale codice T/SQL (sia che provengano all'interno di una stored procedure o non) avviene più o meno nello stesso modo. Utilizzare la sintassi del valore successivo e specificare il nome della sequenza da cui si desidera recuperare il valore successivo. Si preleva il successivo valore disponibile da una sequenza:

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

Un altro ottimo modo per utilizzare una sequenza consiste nel fare in modo che assegna i numeri di riga per le righe in un insieme di righe. Utilizzare la sintassi del valore successivo come parte dell'istruzione select, come illustrato nell'esempio seguente:

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

Si assegna un valore da una sequenza a ogni riga in un recordset.

Come si può notare, questa nuova funzionalità di sequencing è un potente strumento. Il numero e la varietà degli impieghi per le sequenze in SQL Server sono limitati solo dall'immaginazione.

Denny Cherry

**Denny Cherry**ha più di dieci anni di esperienza di gestione di SQL Server. Le sue principali aree di competenza includono l'architettura del sistema, l'ottimizzazione delle prestazioni, la replica e la risoluzione dei problemi. Egli conserva numerose certificazioni correlate a SQL Server, tra cui Microsoft Certified Master per il 2008 di SQL Server. Egli è stato un MVP di Microsoft SQL Server per diversi anni e ha scritto numerosi articoli tecnici e libri sulla gestione di SQL Server e come SQL Server si integra con diverse altre tecnologie.

Contenuto correlato