INF: Domande frequenti - SQL Server 2000 - variabili di tabella

Riepilogo

In questo articolo trovano risposta alcune delle domande frequenti (FAQ) relative alle variabili di tabella introdotte in SQL Server 2000.

Per leggere la descrizione delle variabili di tabella della documentazione in linea di SQL Server, visitare il seguente sito Web Microsoft:

Ulteriori informazioni

Q1: Perché le variabili di tabella introdotte quando le tabelle temporanee erano già disponibili?

A1: Le variabili di tabella presentano i seguenti vantaggi rispetto alle tabelle temporanee:
  • Come menzionato nell'articolo della documentazione in linea di SQL Server "Tabelle" variabili di tabella, come variabili locali, hanno un ambito ben definito alla fine dei quali vengono automaticamente deselezionati.
  • Le variabili di tabella che consentono meno ricompilazioni di una stored procedure rispetto a tabelle temporanee.
  • Le transazioni che coinvolgono le variabili di tabella solo per la durata di un aggiornamento sulla variabile di tabella. Di conseguenza, le variabili di tabella richiedono meno il blocco e la registrazione delle risorse. Poiché le variabili di tabella hanno un ambito limitato e non fanno parte del database persistente, i rollback delle transazioni non influiscono su di essi.
Q2: Che cosa significa affermando che come risultato le variabili di tabella consentono meno ricompilazioni di una stored procedure rispetto a quando vengono utilizzate le tabelle temporanee?

A2: Il seguente articolo spiega alcune motivazioni quando vengono ricompilate stored procedure:

Ricompilazione di procedure di risoluzione dei problemi archiviati 243586

La sezione "Ricompilazioni dovute alla alcune operazioni delle tabelle temporanee" Elenca inoltre alcuni requisiti per evitare una ricompilazione a causa di tabelle temporanee. Queste limitazioni non si applicano alle variabili di tabella.

Le variabili di tabella sono completamente isolate al batch che li non crea pertanto alcuna nuova risoluzione "è si verifica quando un'istruzione CREATE o ALTER ha luogo, che può verificarsi con una tabella temporanea. Le tabelle temporanee necessitano di questa nuova risoluzione ' in modo che la tabella è possibile fare riferimento da una stored procedure nidificata. Le variabili di tabella impediscono completamente questa stored procedure è possono utilizzare piano già compilato, salvando in tal modo le risorse necessarie per elaborare la stored procedure.

Q3: Quali sono alcuni degli svantaggi delle variabili di tabella?

A3: Questi sono alcuni degli svantaggi rispetto alle tabelle temporanee:
  • Impossibile creare indici non cluster per le variabili di tabella, gli indici di sistema creati per un vincolo PRIMARY o UNIQUE. Che possono influenzare le prestazioni delle query rispetto a una tabella temporanea con indici non cluster.
  • Le variabili di tabella non conservano le statistiche come le tabelle temporanee. Impossibile creare statistiche per le variabili di tabella mediante la creazione automatica o utilizzando l'istruzione CREATE STATISTICS. Pertanto, per query complesse in tabelle di grandi dimensioni, la mancanza di statistiche può scoraggiare l'ottimizzatore per determinare il miglior piano di una query, pertanto incidere sulle prestazioni della query.
  • La definizione della tabella non può essere modificata dopo l'istruzione DECLARE iniziale.
  • Le variabili di tabella non possono essere utilizzate in un'istruzione INSERT EXEC o SELECT INTO.
  • Le colonne calcolate nella dichiarazione del tipo di tabella, valori predefiniti e vincoli CHECK non possono chiamare le funzioni definite dall'utente.
  • È possibile utilizzare l'istruzione EXEC o la stored procedure sp_executesql stored procedure per eseguire una query dinamica di SQL Server che fa riferimento a una variabile di tabella, se la variabile è stata creata di fuori dell'istruzione EXEC o la stored procedure sp_executesql stored procedure. Poiché le variabili di tabella è possono fare riferimento solo l'ambito locale, un'istruzione EXEC e una stored procedure sp_executesql stored procedure verrà fuori dall'ambito della variabile di tabella. Tuttavia, è possibile creare la variabile di tabella ed eseguire tutta l'elaborazione all'interno dell'istruzione EXEC o la stored procedure sp_executesql stored procedure in quanto quindi le variabili di tabella ambito locale è l'istruzione EXEC o la stored procedure sp_executesql stored procedure.
T4: Sono le variabili di tabella strutture di sola memoria consentono prestazioni migliori rispetto alle tabelle temporanee o permanenti, poiché vengono gestiti in un database che risiede sul disco fisico?

A4: Una variabile di tabella non è una struttura di sola memoria. Poiché una variabile di tabella potrebbe contenere più dati possono essere contenuti nella memoria, deve esistere una collocazione su disco per memorizzare i dati. Le variabili di tabella vengono create nel database tempdb simile alle tabelle temporanee. Se la memoria è disponibile, le variabili di tabella e le tabelle temporanee vengono create ed elaborate in memoria (cache di dati).

Q5: È necessario utilizzare variabili table anziché tabelle temporanee?

A5: La risposta dipende da questi tre fattori:
  • Il numero di righe che vengono inserite nella tabella.
  • Il numero di ricompilazioni da che di query viene salvata.
  • Il tipo di query e la relativa dipendenza dagli indici e statistiche per le prestazioni.
In alcune situazioni, è utile suddividere una stored procedure con tabelle temporanee in stored procedure più piccole in modo che la ricompilazione venga effettuata su unità più piccole.

In generale, utilizzare le variabili di tabella quando possibile, ad eccezione di quando vi è una quantità notevole di dati e non vi sia utilizzazione ripetuta della tabella. In tal caso, è possibile creare indici nella tabella temporanea per migliorare le prestazioni delle query. Tuttavia, ogni scenario potrebbe essere diverso. Si consiglia di verificare se le variabili di tabella sono più utili delle tabelle temporanee per una determinata query o stored procedure.
Proprietà

ID articolo: 305977 - Ultima revisione: 30 gen 2017 - Revisione: 2

Feedback