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

Traduzione articoli Traduzione articoli
Identificativo articolo: 305977 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Questo articolo risponde ad alcune delle domande frequenti relative alle variabili di tabella che sono state introdotte in SQL Server 2000.

Per leggere la descrizione delle variabili di tabella SQL Server Books Online, visitare il seguente sito Web Microsoft (informazioni in lingua inglese):
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ta-tz_7ysl.asp

Informazioni

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

R1: Le variabili di tabella hanno i seguenti vantaggi rispetto alle tabelle temporanee:
  • Come menzionato nell'articolo relativo alle tabelle in SQL Server Books Online, le variabili di tabella, così come quelle locali, hanno un ambito ben definito al di fuori del quale vengono automaticamente cancellate.
  • Le variabili di tabella consentono meno ricompilazioni di una stored procedure se confrontate con le tabelle temporanee.
  • Le transazioni che coinvolgono le variabili di tabella hanno la durata di un aggiornamento relativo alla variabile di tabella. Per questo motivo le variabili di tabella richiedono meno risorse di blocco e connessione. Dato che le variabili di tabella hanno un ambito limitato e non sono parte del database persistente, i rollback di transazione non influiscono su di esse.
D2: Cosa si intende per variabili di tabella che consentono meno ricompilazioni di una stored procedure rispetto alle tabelle temporanee?

R2: L'articolo riportato di seguito spiega alcune motivazioni nel caso di ricompilazione delle stored procedure:

243586 Risoluzione dei problemi di ricompilazione delle stored procedure
La sezione relativa alla ricompilazione a causa di alcune operazioni delle tabelle temporanee elenca inoltre alcuni requisiti per evitare una ricompilazione di questo tipo. Queste limitazioni non si applicano alle variabili di tabella.

Le variabili di tabella sono completamente isolate al batch che le ha create, pertanto non si deve verificare alcuna nuova risoluzione quando si utilizza un'istruzione CREATE o ALTER, cosa che potrebbe accadere con una tabella temporanea. Le tabelle temporanee necessitano di questa nuova risoluzione per fare in modo che la tabella includa riferimenti di una stored procedure nidificata. Le variabili di tabella impediscono completamente questa evenienza e, per questo motivo, le stored procedure possono utilizzare un piano già compilato, conservando di conseguenza risorse per l'elaborazione.

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

R3: Quelli riportati di seguito sono alcuni degli svantaggi se paragonate alle tabelle temporanee:
  • Nelle variabili di tabella è impossibile creare indici non cluster diversi dagli indici di sistema creati per un vincolo PRIMARY o UNIQUE. Questo fattore può influire sulle prestazioni delle query se paragonate a una tabella temporanea con indici non cluster.
  • Le variabili di tabella non conservano le statistiche come le tabelle temporanee. Le statistiche non possono essere create nelle variabili di tabella mediante la creazione automatica o l'istruzione CREATE STATISTICS. Per questo motivo, per query complesse in tabelle di grandi dimensioni, la mancanza di statistiche può scoraggiare l'ottimizzatore per la determinazione del piano migliore per una query, influendo in questo modo sulle prestazione di tale query.
  • La definizione della tabella non può essere modificata dopo l'istruzione DECLARE iniziale.
  • Le variabili di tabella non possono essere utilizzate nelle istruzioni INSERT EXEC o SELECT INTO.
  • Il vincolo CHECK, i valori DEFAULT e le colonne calcolate nella dichiarazione dei tipi di tabella non possono richiamare le funzioni definite dall'utente.
  • Non è possibile utilizzare l'istruzione EXEC o la stored procedure sp_executesql per l'esecuzione di una query dinamica di SQL Server che fa riferimento a una variabile di tabella, se tale variabile è stata creata all'esterno dell'istruzione EXEC o della stored procedure sp_executesql. Dato che è possibile fare riferimento alle variabili di tabella solo all'interno del loro ambito locale, un'istruzione EXEC e una stored procedure sp_executesql risulterebbero all'esterno dell'ambito della variabile di tabella. È tuttavia possibile creare la variabile di tabella ed eseguire l'elaborazione completa all'interno dell'istruzione EXEC o della stored procedure sp_executesql perché in questo modo l'ambito locale delle variabili di tabella risulta nell'istruzione EXEC o nella stored procedure sp_executesql.
D4: Le variabili di tabella sono strutture di sola memoria che consentono prestazioni migliori se confrontate alle tabelle temporanee o permanenti perché sono conservate in un database che si trova sul disco fisico?

R4: Una variabile di tabella non è una struttura di sola memoria. Affinché una variabile di tabella possa contenere più dati di quanti possano essere inclusi nella memoria, deve esistere una collocazione su disco per memorizzare i dati. Le variabili di tabella sono create nel database tempdb simile alle tabelle temporanee. Se la memoria è disponibile, le variabili di tabella e le tabelle temporanee sono create ed elaborate mentre si trovano in memoria (cache di dati).

D5: È necessario utilizzare le variabili di tabella invece delle tabelle temporanee?

R5: La risposta dipende da tre fattori:
  • Il numero di righe inserite nella tabella.
  • Il numero di ricompilazioni da cui è salvata la query.
  • Il tipo di query e la relativa dipendenza dagli indici e dalle statistiche per quanto riguarda le prestazioni.
In alcuni casi è utile suddividere una stored procedure che include tabelle temporanee in stored procedure più piccole per fare in modo che la ricompilazione venga effettuata su unità più piccole.

In generale si utilizzano le variabili di tabella ogni volta che è possibile, a eccezione del caso in cui sia presente un volume di dati significativo e la tabella venga utilizzata più volte. In tal caso è possibile creare indici nella tabella temporanea per migliorare le prestazioni delle query. Tuttavia le situazioni possono essere diverse. Si consiglia di verificare se le variabili di tabella sono più utili delle tabelle temporanee per una query o stored procedure particolare.

Per ulteriori informazioni, vistare il newsgroup relativo a Microsoft SQL Server al seguente indirizzo (informazioni in lingua inglese): Newsgroup di Microsoft SQL Server

Per commenti su questo o altri articoli della Microsoft Knowledge Base, inviare un messaggio di posta elettronica all'indirizzo SQLKB@Microsoft.com.

Proprietà

Identificativo articolo: 305977 - Ultima modifica: martedì 23 gennaio 2007 - Revisione: 6.1
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Standard Edition
Chiavi: 
kbfaq kbinfo KB305977
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com