CREATE STATISTICS (Transact-SQL)
Crea un istogramma e gruppi di densità associati (insiemi) per la colonna o il set di colonne specificato di una tabella o una vista indicizzata. Vengono inoltre create statistiche di riepilogo delle stringhe in base alle statistiche delle colonne char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), text e ntext. In Query Optimizer queste informazioni vengono utilizzate per scegliere il piano più efficiente per il recupero o l'aggiornamento dei dati. Le statistiche aggiornate consentono all'utilità di ottimizzazione di valutare correttamente il costo di vari piani di query e di sceglierne uno di elevata qualità. Per ulteriori informazioni sulle statistiche in SQL Server 2005, vedere Statistiche utilizzate da Query Optimizer in Microsoft SQL Server 2005 nel sito Web Microsoft TechNet.
Convenzioni della sintassi Transact-SQL
Sintassi
CREATE STATISTICS statistics_name
ON { table | view } ( column [ ,...n ] )
[ WITH
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
| STATS_STREAM = stats_stream ] [ , ] ]
[ NORECOMPUTE ]
] ;
Argomenti
- statistics_name
Nome del gruppo di statistiche da creare. I nomi di statistiche devono essere conformi alle regole per gli identificatori e devono essere univoci all'interno della tabella o della vista in cui vengono creati.
- table
Nome della tabella per cui si desidera creare le statistiche specificate. I nomi di tabella devono essere conformi alle regole per gli identificatori. table corrisponde alla tabella a cui è associata la colonna specificata nell'argomento column. Il nome del proprietario della tabella è facoltativo. È possibile creare statistiche per tabelle di un altro database specificando un nome di tabella completo.
- view
Nome della vista per cui si desidera creare le statistiche specificate. Per poter creare statistiche per una vista, è necessario che la vista includa un indice cluster. I nomi di vista devono essere conformi alle regole per gli identificatori. view corrisponde alla vista a cui è associata la colonna specificata nell'argomento column. Il nome del proprietario della vista è facoltativo. È possibile creare statistiche per viste di un altro database specificando un nome di vista completo.
column
Colonna o set di colonne per cui si desidera creare le statistiche. È possibile specificare qualsiasi colonna utilizzabile come chiave di indice, con le eccezioni seguenti:- Non è possibile specificare colonne di tipo xml.
- La dimensione massima consentita per i valori combinati delle colonne può superare il limite di 900 byte imposto per il valore della chiave di indice.
È possibile specificare colonne calcolate solo se le opzioni del database ARITHABORT e QUOTED_IDENTIFIER sono impostate su ON. È possibile specificare colonne CLR con tipo definito dall'utente se il tipo supporta l'ordinamento binario. È possibile specificare colonne calcolate definite come chiamate di metodi da una colonna con tipo definito dall'utente se tali metodi sono contrassegnati come deterministici. Per ulteriori informazioni sulla creazione di colonne CLR con tipo definito dall'utente, vedere Utilizzo di tipi CLR definiti dall'utente.
- FULLSCAN
Specifica che per la creazione delle statistiche devono essere lette tutte le righe della tabella specificata nell'argomento table o della vista specificata nell'argomento view. L'opzione FULLSCAN equivale a SAMPLE 100 PERCENT. Questa opzione non può essere utilizzata quando viene specificata l'opzione SAMPLE.
SAMPLE number { PERCENT | ROWS }
Specifica che per la creazione delle statistiche deve essere letta una percentuale o un numero specificato di righe di dati tramite campionamento casuale. number deve essere un valore integer. Se viene specificato PERCENT, number deve essere compreso tra 0 e 100. Se viene specificato ROWS, number può essere compreso tra 0 e il numero totale di righe n.Per garantire che vengano create statistiche utili, Motore di database di SQL Server 2005 verifica che venga eseguito il campionamento di un numero minimo di valori. Se quando si utilizza l'opzione PERCENT, ROWS o number il numero di righe utilizzate per il campionamento non è sufficiente, Motore di database corregge automaticamente il campionamento in base al numero di righe esistenti nella tabella o nella vista. Il campionamento viene eseguito come minimo su circa 1.000 pagine di dati. Se quando si utilizza l'opzione PERCENT, ROWS o number vengono restituiti più valori di quanti siano necessari per un campione significativo, Motore di database tenta di creare un campione con la quantità di dati richiesta. Poiché i campioni vengono creati tramite una scansione di pagine di dati complete, tuttavia, la dimensione effettiva del campione può non corrispondere alla quantità specificata. Quando viene specificato 0 PERCENT o ROWS, il risultato è un set di statistiche vuoto.
Questa opzione non può essere utilizzata quando viene specificata l'opzione FULLSCAN. Se l'opzione SAMPLE o FULLSCAN viene omessa, viene calcolato un campione automatico da Motore di database.
NORECOMPUTE
Specifica che le statistiche non devono essere ricalcolate automaticamente da Motore di database. Se questa opzione viene specificata, in Motore di database continuano a essere utilizzate le statistiche create in precedenza anche in seguito alla modifica dei dati. Le statistiche non vengono aggiornate né gestite automaticamente da Motore di database. Pertanto, è possibile che vengano generati piani non ottimali.Attenzione: È consigliabile limitare l'utilizzo di questa opzione e riservarne l'applicazione a un amministratore del sistema qualificato.
- STATS_STREAM **=**stats_stream
Sintassi destinata ad esclusivo uso interno e non supportata. Microsoft si riserva il diritto di modificarla in qualsiasi momento.
Osservazioni
Solo il proprietario di una tabella può creare statistiche per tale tabella. Il proprietario di una tabella può creare un gruppo di statistiche (insieme) in qualsiasi momento, indipendentemente dal fatto che la tabella contenga o meno dati.
Se l'opzione del database AUTO_UPDATE_STATISTICS è impostata su ON (impostazione predefinita) e la clausola NORECOMPUTE viene omessa, in Motore di database verranno aggiornate automaticamente tutte le statistiche create manualmente.
L'istruzione CREATE STATISTICS può essere eseguita su una vista indicizzata. Le statistiche su viste indicizzate vengono utilizzate in fase di ottimizzazione solo se nella query viene fatto riferimento diretto alla vista e per la vista è specificato l'hint NOEXPAND. In caso contrario, le statistiche derivano dalle tabelle sottostanti prima della sostituzione della vista indicizzata nel piano della query. Questa sostituzione è supportata solo in Microsoft SQL Server 2005 Enterprise Edition e Developer Edition.
Autorizzazioni
È necessario disporre dell'autorizzazione ALTER per la tabella o la vista.
Esempi
A. Utilizzo di CREATE STATISTICS con l'opzione SAMPLE number PERCENT
Nell'esempio seguente viene creato il gruppo di statistiche (insieme) ContactMail1
. Vengono calcolate statistiche mediante campionamento casuale sul 5% dei valori delle colonne ContactID
e EmailAddress
della tabella Contact
del database AdventureWorks
.
USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
ON Person.Contact (ContactID, EmailAddress)
WITH SAMPLE 5 PERCENT;
B. Utilizzo di CREATE STATISTICS con le opzioni FULLSCAN e NORECOMPUTE
Nell'esempio seguente viene creato il gruppo di statistiche (insieme) ContactMail2
. Vengono calcolate statistiche per tutte le righe nelle colonne ContactID
e EmailAddress
della tabella Contact
e viene disattivato il ricalcolo automatico delle statistiche.
CREATE STATISTICS NamePurchase
ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
WITH FULLSCAN, NORECOMPUTE;
Vedere anche
Riferimento
ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
EVENTDATA (Transact-SQL)