ALTER INDEX (Transact-SQL)
Consente di modificare un indice di tabella o di vista esistente, di tipo relazionale o XML, tramite la disabilitazione, la ricompilazione o la riorganizzazione dell'indice oppure tramite l'impostazione di opzioni per l'indice.
Si applica a: SQL Server (da SQL Server 2008 fino alla versione corrente), Database SQL di Azure. |
Convenzioni della sintassi Transact-SQL
Sintassi
-- SQL Server Syntax
ALTER INDEX { index_name | ALL }
ON <object>
{ REBUILD
[ PARTITION = ALL ]
[ WITH ( <rebuild_index_option> [ ,...n ] ) ]
| [ PARTITION = partition_number
[ WITH ( <single_partition_rebuild_index_option> ) [ ,...n ] ]
]
| DISABLE
| REORGANIZE
[ PARTITION = partition_number ]
[ WITH ( LOB_COMPACTION = { ON | OFF } ) ]
| SET ( <set_index_option> [ ,...n ] )
}
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
table_or_view_name
}
<rebuild_index_option > ::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = { ON | OFF }
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| STATISTICS_INCREMENTAL = { ON | OFF }
| ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ]
}
<range> ::=
<partition_number_expression> TO <partition_number_expression>
<single_partition_rebuild_index_option> ::=
{
SORT_IN_TEMPDB = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE} }
| ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}
<set_index_option>::=
{
ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
}
<low_priority_lock_wait>::=
{
WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,
ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}
-- Windows Azure SQL Database Syntax
ALTER INDEX { index_name | ALL }
ON <object>
{ REBUILD
[
[ WITH ( <rebuild_index_option> [ ,...n ] ) ]
]
| DISABLE
| SET ( <set_index_option> [ ,...n ] )
}
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
table_or_view_name
}
<rebuild_index_option > ::=
{
IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| ONLINE = { ON | OFF }
}
<set_index_option>::=
{
IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
}
Argomenti
index_name
Nome dell'indice. I nomi di indice devono essere univoci all'interno di una tabella o di una vista, ma non all'interno di un database. Devono inoltre essere conformi alle regole degli identificatori.ALL
Specifica tutti gli indici associati alla tabella o alla vista indipendentemente dal tipo di indice. Se viene specificata la parola chiave ALL e uno o più indici si trovano in un filegroup offline o di sola lettura oppure se l'operazione specificata non è consentita per uno o più tipi di indice, l'istruzione ha esito negativo. Nella tabella seguente vengono elencati le operazioni sugli indici e i tipi di indice non supportati.Indicazione di ALL con questa operazione
Indici non supportati (l'istruzione ha esito negativo se la tabella include uno o più di questi indici)
REBUILD WITH ONLINE = ON
Indice XML
Indice spaziale
Indice columnstore
Si applica a: SQL Server 2012 - SQL Server 2014.
REBUILD PARTITION = partition_number
Indice non partizionato, indice XML, indice spaziale o indice disabilitato
REORGANIZE
Indici con ALLOW_PAGE_LOCKS impostato su OFF
REORGANIZE PARTITION = partition_number
Indice non partizionato, indice XML, indice spaziale o indice disabilitato
IGNORE_DUP_KEY = ON
Indice XML
Indice spaziale
Indice columnstore
Si applica a: SQL Server 2012 - SQL Server 2014.
ONLINE = ON
Indice XML
Indice spaziale
Indice columnstore
Si applica a: SQL Server 2012 - SQL Server 2014.
Avviso
Per informazioni più dettagliate sulle operazioni di indice eseguibili online, vedere Linee guida per operazioni di indice online.
Se la parola chiave ALL viene specificata con PARTITION = partition_number, tutti gli indici devono essere allineati, il che significa che devono essere partizionati in base a funzioni di partizione equivalenti. L'utilizzo di ALL con PARTITION comporta la ricompilazione o la riorganizzazione di tutte le partizioni degli indici con lo stesso partition_number. Per ulteriori informazioni sugli indici partizionati, vedere Tabelle e indici partizionati.
database_name
Nome del database.schema_name
Nome dello schema a cui appartiene la tabella o la vista.table_or_view_name
Nome della tabella o della vista associata all'indice. Per visualizzare un report degli indici di un oggetto, utilizzare la vista del catalogo sys.indexes.Il database SQL di Windows Azure supporta il formato del nome in tre parti database_name.[schema_name].table_or_view_name, dove database_name è il database corrente o tempdb e table_or_view_name inizia con #.
REBUILD [ WITH (<rebuild_index_option> [ ,... n]) ]
Specifica che l'indice verrà ricompilato con le stesse colonne, lo stesso tipo di indice, lo stesso attributo di univocità e lo stesso tipo di ordinamento. Per gli indici columnstore, l'ordinamento non è applicabile. Questa clausola equivale a DBCC DBREINDEX. REBUILD abilita un indice disabilitato. La ricompilazione di un indice cluster non comporta la ricompilazione degli indici non cluster associati, a meno che non venga specificata la parola chiave ALL. Se non vengono specificate opzioni per l'indice, vengono applicati i valori esistenti delle opzioni per gli indici archiviati in sys.indexes. Per le opzioni il cui valore non è archiviato in sys.indexes, viene applicato il valore predefinito indicato nella definizione dell'argomento dell'opzione.Se viene specificata la parola chiave ALL e la tabella sottostante è un heap, l'operazione di ricompilazione non ha effetto sulla tabella. Vengono ricompilati tutti gli indici non cluster associati alla tabella.
L'operazione di ricompilazione può essere sottoposta a una registrazione minima se viene utilizzato il modello di recupero del database con registrazione minima o con registrazione minima delle operazioni bulk.
Nota
Quando si ricompila un indice XML primario, la tabella utente sottostante non è disponibile per tutta la durata dell'operazione sull'indice.
PARTITION
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica che verrà ricompilata o riorganizzata solo una partizione di un indice. La parola chiave PARTITION non può essere utilizzata se l'indice specificato in index_name non è di tipo partizionato.
PARTITION = ALL consente di ricompilare tutte le partizioni.
Avviso
La creazione e la ricompilazione di indici non allineati per una tabella con oltre 1.000 partizioni sono possibili, ma non supportate.Questo tipo di operazioni può causare riduzioni delle prestazioni e un eccessivo consumo della memoria.Quando il numero di partizioni supera 1.000, si consiglia di utilizzare solo indici allineati.
partition_number
Si applica a: SQL Server 2008 - SQL Server 2014.
Numero di partizioni di un indice partizionato da ricompilare o riorganizzare. partition_number è un'espressione costante che può fare riferimento a variabili, incluse variabili o funzioni con tipo definito dall'utente (UDT) e funzioni definite dall'utente, ma non a istruzioni Transact-SQL. È necessario che partition_number esista o l'istruzione avrà esito negativo.
WITH (<single_partition_rebuild_index_option>)
Si applica a: SQL Server 2008 - SQL Server 2014.
Quando si ricompila una singola partizione (PARTITION = n), è possibile specificare le opzioni SORT_IN_TEMPDB, MAXDOP e DATA_COMPRESSION. Gli indici XML non possono essere specificati in un'operazione di ricompilazione di una singola partizione.
DISABLE
Contrassegna l'indice come disabilitato e non disponibile per l'utilizzo nel Motore di database. È possibile disabilitare qualsiasi indice. La definizione di un indice disabilitato rimane nel catalogo di sistema senza i dati dell'indice sottostante. La disabilitazione di un indice cluster impedisce all'utente di accedere ai dati della tabella sottostante. Per abilitare un indice, utilizzare ALTER INDEX REBUILD oppure CREATE INDEX WITH DROP_EXISTING. Per ulteriori informazioni, vedere Disabilitazione di indici e vincoli e Abilitazione di indici e vincoli.REORGANIZE
Specifica che verrà riorganizzato il livello foglia dell'indice. Per gli indici columnstore cluster, specifica che tutti i rowgroup CLOSED verranno spostati nell'indice columnstore. L'istruzione ALTER INDEX REORGANIZE viene sempre eseguita online. Ciò significa che i blocchi di tabella a lungo termine non vengono mantenuti attivi e le query o gli aggiornamenti inerenti la tabella sottostante possono continuare durante la transazione ALTER INDEX REORGANIZE. La parola chiave REORGANIZE non può essere utilizzata con gli indici disabilitati o con gli indici per cui l'opzione ALLOW_PAGE_LOCKS è impostata su OFF. Il rollback dell'operazione REORGANIZE eseguita all'interno di una transazione non viene effettuato se la transazione è stata sottoposta al rollback.WITH ( LOB_COMPACTION = { ON | OFF } )
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica che tutte le pagine contenenti dati LOB devono essere compattate. I tipi di dati LOB sono image, text, ntext, varchar(max), nvarchar(max), varbinary(max) e xml. La compattazione di questi dati può consentire un miglioramento dell'utilizzo dello spazio su disco. Il valore predefinito è ON.
ON
Tutte le pagine contenenti dati LOB vengono compattate.La riorganizzazione di un indice cluster specificato compatta tutte le colonne LOB contenute nell'indice cluster.
Quando si riorganizza un indice non cluster si compattano nell'indice tutte le colonne LOB che sono colonne non chiave (incluse). Quando viene specificata la parola chiave ALL, vengono riorganizzati tutti gli indici associati alla tabella o alla vista specificata e vengono compattate tutte le colonne LOB associate all'indice cluster, alla tabella sottostante o all'indice non cluster con colonne incluse.
OFF
Le pagine contenenti dati LOB non vengono compattate.OFF non ha alcun effetto su un heap.
La clausola LOB_COMPACTION viene ignorata se non sono presenti colonne LOB.
SET ( <set_index option> [ ,... n] )
Specifica alcune opzioni per l'indice senza ricompilare né riorganizzare l'indice. La parola chiave SET non può essere specificata per un indice disabilitato.PAD_INDEX = { ON | OFF }
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica il riempimento dell'indice. Il valore predefinito è OFF.
ON
La percentuale di spazio disponibile specificata in FILLFACTOR viene applicata alle pagine di livello intermedio dell'indice. Se l'opzione FILLFACTOR non viene specificata e l'opzione PAD_INDEX è impostata su ON, viene utilizzato il valore del fattore di riempimento archiviato in sys.indexes.OFF o fillfactor non specificato
Le pagine di livello intermedio vengono riempite poco al di sotto della capacità massima. Lo spazio residuo è sufficiente per almeno una riga della dimensione massima supportata dall'indice, in base al set di chiavi nelle pagine intermedie.
Per ulteriori informazioni, vedere CREATE INDEX (Transact-SQL).
FILLFACTOR = fillfactor
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica una percentuale indicante il livello di riempimento del livello foglia di ogni pagina di indice applicato dal Motore di database durante la creazione o la modifica dell'indice. fillfactor deve essere un valore intero compreso tra 1 e 100. Il valore predefinito è 0. I valori 0 e 100 relativi al fattore di riempimento sono equivalenti.
Un'impostazione esplicita dell'opzione FILLFACTOR viene applicata solo in fase di creazione o ricompilazione dell'indice. La percentuale specificata di spazio vuoto delle pagine non viene mantenuta in modo dinamico da Motore di database. Per ulteriori informazioni, vedere CREATE INDEX (Transact-SQL).
Per visualizzare l'impostazione del fattore di riempimento, utilizzare sys.indexes.
Importante
La creazione o la modifica di un indice cluster con un valore FILLFACTOR influisce sulla quantità di spazio di archiviazione occupata dai dati, perché i dati vengono ridistribuiti dal Motore di database durante la creazione dell'indice cluster.
SORT_IN_TEMPDB = { ON | OFF }
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica se i risultati dell'ordinamento devono essere archiviati in tempdb. Il valore predefinito è OFF.
ON
I risultati intermedi dell'ordinamento utilizzati per la compilazione dell'indice vengono archiviati in tempdb. Se tempdb si trova in un set di dischi diverso rispetto al database utente, il tempo necessario per creare un indice potrebbe essere minore. La quantità di spazio su disco utilizzata durante la compilazione dell'indice sarà tuttavia maggiore.OFF
I risultati intermedi dell'ordinamento vengono archiviati nello stesso database dell'indice.
Se non è necessario eseguire un'operazione di ordinamento oppure se l'ordinamento può essere eseguito in memoria, l'opzione SORT_IN_TEMPDB viene ignorata.
Per ulteriori informazioni, vedere Opzione SORT_IN_TEMPDB per gli indici.
IGNORE_DUP_KEY = { ON | OFF }
Specifica l'errore restituito quando un'operazione di inserimento tenta di inserire valori di chiave duplicati in un indice univoco. L'opzione IGNORE_DUP_KEY viene applicata solo alle operazioni di inserimento eseguite dopo la creazione o la ricompilazione dell'indice. Il valore predefinito è OFF.ON
Viene visualizzato un messaggio di avviso quando i valori di chiave duplicati vengono inseriti in un indice univoco. Avranno esito negativo solo le righe che violano il vincolo di unicità.OFF
Viene visualizzato un messaggio di errore quando i valori di chiave duplicati vengono inseriti in un indice univoco. Viene eseguito il rollback dell'intera operazione INSERT.
L'opzione IGNORE_DUP_KEY non può essere impostata su ON per gli indici creati in una vista, negli indici non univoci, negli indici XML, spaziali e filtrati.
Per visualizzare IGNORE_DUP_KEY, utilizzare sys.indexes.
Per quanto riguarda la sintassi compatibile con le versioni precedenti, WITH IGNORE_DUP_KEY equivale a WITH IGNORE_DUP_KEY = ON.
STATISTICS_NORECOMPUTE = { ON | OFF }
Specifica se le statistiche di distribuzione vengono ricalcolate. Il valore predefinito è OFF.ON
Le statistiche non aggiornate non vengono ricalcolate automaticamente.OFF
Abilita l'aggiornamento automatico delle statistiche.
Per ripristinare l'aggiornamento automatico delle statistiche, impostare l'opzione STATISTICS_NORECOMPUTE su OFF oppure eseguire UPDATE STATISTICS senza la clausola NORECOMPUTE.
Importante
La disabilitazione del ricalcolo automatico delle statistiche di distribuzione può compromettere la selezione di piani di esecuzione ottimali per le query riguardanti la tabella in Query Optimizer.
STATISTICS_INCREMENTAL = { ON | OFF }
Quando impostata su ON, le statistiche create sono di tipo per partizione. Quando impostata su OFF, l'albero delle statistiche viene eliminato e le statistiche vengono rielaborate da SQL Server. L'impostazione predefinita è OFF.Se le statistiche per partizione non sono supportate, l'opzione viene ignorata e viene generato un avviso. Le statistiche incrementali non sono supportate per i seguenti tipi di statistiche:
Statistiche create con indici che non hanno il partizionamento allineato con la tabella di base.
Statistiche create per i database secondari leggibili AlwaysOn.
Statistiche create per i database di sola lettura.
Statistiche create per gli indici filtrati.
Statistiche create per le viste.
Statistiche create per le tabelle interne.
Statistiche create con indici spaziali o indici XML.
Si applica a: SQL Server 2014 - SQL Server 2014.
ONLINE = { ON | OFF } <come si applica a rebuild_index_option>
Specifica se le tabelle sottostanti e gli indici associati sono disponibili per le query e la modifica dei dati durante l'operazione sugli indici. Il valore predefinito è OFF.Per un indice XML o spaziale, è supportata solo l'opzione ONLINE = OFF e se ONLINE è impostata su ON viene generato un errore.
Nota
Le operazioni sugli indici online non sono disponibili in tutte le edizioni di Microsoft SQL Server.Per un elenco delle funzionalità supportate dalle edizioni di SQL Server, vedere Funzionalità supportate dalle edizioni di SQL Server 2014.
ON
I blocchi di tabella a lungo termine non vengono mantenuti per la durata dell'operazione sugli indici. Durante la fase principale dell'operazione viene mantenuto solo un blocco preventivo condiviso (IS, Intent Shared) sulla tabella di origine, In questo modo, le query o gli aggiornamenti relativi alla tabella e agli indici sottostanti possono continuare. All'inizio dell'operazione viene mantenuto brevemente un blocco condiviso (S) sull'oggetto di origine. Al termine dell'operazione, se è in corso la creazione di un indice non cluster, viene mantenuto un blocco S sull'origine per un periodo di tempo molto breve. Se è in corso la creazione o l'eliminazione online di un indice cluster o la ricompilazione di un indice cluster o non cluster, viene acquisito un blocco di modifica dello schema (SCH-M). L'opzione ONLINE non può essere impostata su ON quando viene creato un indice per una tabella temporanea locale.OFF
I blocchi di tabella vengono applicati per la durata dell'operazione sugli indici. Un'operazione sull'indice offline che crea, ricompila o elimina un indice cluster, spaziale o XML oppure che ricompila o elimina un indice non cluster, acquisisce un blocco di modifica dello schema (SCH-M) sulla tabella. Il blocco impedisce agli utenti di accedere alla tabella sottostante per la durata dell'operazione. Un'operazione sugli indici offline che crea un indice non cluster acquisisce un blocco condiviso (S) sulla tabella. Tale blocco impedisce l'aggiornamento della tabella sottostante ma consente operazioni di lettura, ad esempio l'esecuzione di istruzioni SELECT.
Per ulteriori informazioni, vedere Funzionamento delle operazioni sugli indici online.
È possibile ricompilare online tutti gli indici, inclusi quelli di tabelle temporanee globali, ad eccezione dei seguenti:
Indici XML
Indici di tabelle temporanee locali
Un subset di un indice partizionato (è possibile ricompilare online un intero indice partizionato).
ALLOW_ROW_LOCKS = { ON | OFF }
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica se sono consentiti blocchi di riga. Il valore predefinito è ON.
ON
I blocchi di riga sono consentiti durante l'accesso all'indice. Il Motore di database determina quando utilizzare blocchi di riga.OFF
I blocchi di riga non vengono utilizzati.
ALLOW_PAGE_LOCKS = { ON | OFF }
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica se sono consentiti blocchi a livello di pagina. Il valore predefinito è ON.
ON
I blocchi a livello di pagina sono consentiti durante l'accesso all'indice. Il Motore di database determina quando utilizzare blocchi a livello di pagina.OFF
I blocchi a livello di pagina non vengono utilizzati.
Nota
Quando l'opzione ALLOW_PAGE_LOCKS è impostata su OFF, non è possibile eseguire operazioni di riorganizzazione degli indici.
MAXDOP **=**max_degree_of_parallelism
Si applica a: SQL Server 2008 - SQL Server 2014.
Esegue l'override dell'opzione di configurazione max degree of parallelism per la durata dell'operazione sugli indici. Per ulteriori informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism. Utilizzare MAXDOP per limitare il numero di processori utilizzati durante l'esecuzione di un piano parallelo. Il valore massimo è 64 processori.
Importante
Sebbene l'opzione MAXDOP sia supportata a livello di sintassi per tutti gli indici XML, per un indice XML primario o spaziale ALTER INDEX utilizza attualmente solo un processore singolo.
I possibili valori di max_degree_of_parallelism sono i seguenti:
1
Disattiva la generazione di piani paralleli.>1
Limita il numero massimo di processori utilizzati in un'operazione parallela sull'indice in base al numero specificato.0 (predefinito)
Utilizza il numero effettivo di processori o un numero inferiore in base al carico di lavoro corrente del sistema.
Per ulteriori informazioni, vedere Configurazione di operazioni parallele sugli indici.
Nota
Le operazioni parallele sugli indici sono disponibili solo in alcune edizioni di Microsoft SQL Server.Per un elenco delle funzionalità supportate dalle edizioni di SQL Server, vedere Funzionalità supportate dalle edizioni di SQL Server 2014.
DATA_COMPRESSION
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica l'opzione di compressione dei dati per l'indice, il numero di partizione o l'intervallo di partizioni specificato. Sono disponibili le opzioni seguenti:
NONE
L'indice o le partizioni specificate non vengono compressi. Non si applica agli indici columnstore.ROW
L'indice o le partizioni specificate vengono compressi utilizzando la compressione di riga. Non si applica agli indici columnstore.PAGE
L'indice o le partizioni specificate vengono compressi utilizzando la compressione di pagina. Non si applica agli indici columnstore.COLUMNSTORE
Si applica a: SQL Server 2014 - SQL Server 2014.
Si applica solo agli indici columnstore, inclusi gli indici columnstore cluster e quelli non cluster. COLUMNSTORE specifica di decomprimere l'indice o le partizioni specificate compresse con l'opzione COLUMNSTORE_ARCHIVE. Quando i dati vengono ripristinati, continueranno a essere compressi con la compressione columnstore utilizzata per tutti gli indici columnstore.
COLUMNSTORE_ARCHIVE
Si applica a: SQL Server 2014 - SQL Server 2014.
Si applica solo agli indici columnstore, inclusi gli indici columnstore cluster e quelli non cluster. COLUMNSTORE_ARCHIVE comprimerà ulteriormente la partizione specificata a una dimensione inferiore. Può essere utilizzata per l'archiviazione o in altre situazioni in cui sono richieste dimensioni di archiviazione inferiori ed è possibile concedere più tempo per l'archiviazione e il recupero.
Per ulteriori informazioni sulla compressione, vedere Compressione dei dati.
ON PARTITIONS ( { <partition_number_expression> | <range> } [,...n] )
Si applica a: SQL Server 2008 - SQL Server 2014.
Specifica le partizioni alle quali si applica l'impostazione DATA_COMPRESSION. Se l'indice non è partizionato, l'argomento ON PARTITIONS genererà un errore. Se la clausola ON PARTITIONS non viene fornita, l'opzione DATA_COMPRESSION si applica a tutte le partizioni di un indice partizionato.
È possibile specificare <partition_number_expression> nei modi seguenti:
Fornire il numero di una partizione, ad esempio ON PARTITIONS (2).
Fornire i numeri di partizione per più partizioni singole separati da virgole, ad esempio ON PARTITIONS (1, 5).
Fornire sia intervalli, sia singole partizioni, ad esempio ON PARTITIONS (2, 4, 6 TO 8).
È possibile specificare <range> sotto forma di numeri di partizione separati dalla parola TO, ad esempio ON PARTITIONS (6 TO 8).
Per impostare tipi diversi di compressione dei dati per partizioni diverse, specificare più volte l'opzione DATA_COMPRESSION, ad esempio:
REBUILD WITH ( DATA_COMPRESSION = NONE ON PARTITIONS (1), DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5) );
ONLINE = { ON | OFF } <come si applica a single_partition_rebuild_index_option>
Specifica se un indice o una partizione di indice di una tabella sottostante può essere ricompilata online o offline. Se REBUILD viene eseguito online (ON) i dati nella tabella sono disponibili per le query e le modifiche durante l'operazione sull'indice. L'impostazione predefinita è OFF.ON
I blocchi di tabella a lungo termine non vengono mantenuti per la durata dell'operazione sugli indici. Durante la fase principale dell'operazione viene mantenuto solo un blocco preventivo condiviso (IS, Intent Shared) sulla tabella di origine, È necessario un blocco condiviso (S) sulla tabella all'inizio della ricompilazione dell'indice e un blocco di modifica schema (Sch-M) sulla tabella alla fine della ricompilazione dell'indice online. Sebbene entrambi i blocchi siano blocchi di metadati brevi, soprattutto il blocco Sch-M deve attendere il completamento di tutte le transazioni bloccanti. Durante il tempo di attesa il blocco Sch-M impedisce tutte le altre transazioni in attesa dietro il blocco stesso per l'accesso alla stessa tabella.Nota
Con la ricompilazione dell'indice online è possibile impostare le opzioni low_priority_lock_wait descritte più avanti in questa sezione.
OFF
I blocchi di tabella vengono applicati per la durata dell'operazione sugli indici. Il blocco impedisce agli utenti di accedere alla tabella sottostante per la durata dell'operazione.
WAIT_AT_LOW_PRIORITY
Si applica a: SQL Server 2014 - SQL Server 2014.
Per una ricompilazione di indice online è necessario attendere il blocco delle operazioni su questa tabella. WAIT_AT_LOW_PRIORITY indica che l'operazione di ricompilazione di indice online rimarrà in attesa di blocchi con priorità bassa, consentendo la continuazione delle altre operazioni mentre quella di compilazione di indice online è in attesa. L'omissione dell'opzione WAIT AT LOW PRIORITY equivale a WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).
MAX_DURATION = time [MINUTES ]
Si applica a: SQL Server 2014 - SQL Server 2014.
Il tempo (valore intero specificato in minuti) di attesa con priorità bassa dei blocchi di ricompilazione di indice online durante l'esecuzione del comando DDL. Se l'operazione viene bloccata per il tempo specificato in MAX_DURATION, verrà eseguita una delle azioni ABORT_AFTER_WAIT. Il tempo MAX_DURATION è sempre espresso in minuti e la parola MINUTES può essere omessa.
ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]
Si applica a: SQL Server 2014 - SQL Server 2014.
NONE
Continuare ad attendere il blocco con priorità normale (regolare).SELF
Esce dall'operazione DDL di ricompilazione dell'indice online attualmente in esecuzione senza eseguire alcuna azione.BLOCKERS
Termina tutte le transazioni utente che bloccano l'operazione DDL di ricompilazione dell'indice online in modo da poter continuare l'operazione. L'opzione BLOCKERS richiede che l'accesso disponga dell'autorizzazione ALTER ANY CONNECTION.
Osservazioni
L'istruzione ALTER INDEX non può essere utilizzata per ripartizionare un indice o spostarlo in un filegroup diverso né per modificare la definizione dell'indice, ad esempio per aggiungere o eliminare colonne oppure per modificarne l'ordine. Per eseguire queste operazioni, utilizzare CREATE INDEX con la clausola DROP_EXISTING.
Quando un'opzione non viene specificata in modo esplicito, viene applicata l'impostazione corrente. Se, ad esempio, non viene specificata un'impostazione per FILLFACTOR nella clausola REBUILD, verrà utilizzato il valore del fattore di riempimento archiviato nel catalogo di sistema durante il processo di ricompilazione. Per visualizzare le impostazioni correnti delle opzioni per gli indici, utilizzare sys.indexes.
Nota
I valori di ONLINE, MAXDOP e SORT_IN_TEMPDB non vengono archiviati nel catalogo di sistema.Se non viene specificato un valore nell'istruzione dell'indice, viene utilizzato il valore predefinito dell'opzione.
Nei computer multiprocessore l'istruzione ALTER INDEX REBUILD utilizza automaticamente più processori per eseguire le operazioni di analisi e ordinamento associate alla modifica dell'indice, in modo identico ad altre query. Quando si esegue ALTER INDEX REORGANIZE, con o senza LOB_COMPACTION, il valore di max degree of parallelism corrisponde a un'operazione a thread singolo. Per ulteriori informazioni, vedere Configurazione di operazioni parallele sugli indici.
Non è possibile riorganizzare o ricompilare indici contenuti in un filegroup offline o di sola lettura. Quando viene specificata la parola chiave ALL e uno o più indici si trovano in un filegroup offline o di sola lettura, l'istruzione ha esito negativo.
Ricompilazione di indici
La ricompilazione di un indice consiste nell'eliminazione e nella ricreazione dell'indice. Questa operazione consente di rimuovere la frammentazione, rendere disponibile spazio su disco grazie alla compattazione delle pagine in base all'impostazione del fattore di riempimento esistente o specificata e riordinare le righe dell'indice in pagine contigue. Quando viene specificata la parola chiave ALL, tutti gli indici della tabella vengono eliminati e ricompilati in una singola transazione. Non è necessario eliminare in anticipo i vincoli FOREIGN KEY. Quando vengono ricompilati indici con un numero di extent pari o superiore a 128, il Motore di database posticipa le effettive deallocazioni delle pagine e i blocchi associati fino al termine del commit della transazione.
La ricompilazione o la riorganizzazione degli indici di dimensioni ridotte spesso non riduce la frammentazione. Le pagine di indici di dimensioni ridotte vengono archiviate in extent misti. Poiché gli extent misti possono essere condivisi al massimo da otto oggetti, la frammentazione in un indice di dimensioni ridotte potrebbe non ridursi dopo la riorganizzazione o la ricompilazione dell'indice.
In SQL Server 2014 le statistiche non vengono create analizzando tutte le righe nella tabella se viene creato o ricompilato un indice partizionato. Query Optimizer utilizza invece l'algoritmo di campionamento predefinito per generare statistiche. Per ottenere statistiche sugli indici partizionati analizzando tutte le righe nella tabella, utilizzare CREATE STATISTICS o UPDATE STATISTICS con la clausola FULLSCAN.
Nelle versioni precedenti di SQL Server è talvolta possibile ricompilare un indice non cluster per risolvere le incoerenze causate da errori hardware. In SQL Server 2008 e nelle versioni successive, è ancora possibile correggere tali incoerenze tra l'indice e l'indice cluster tramite la ricompilazione di un indice non cluster offline. Non è possibile, tuttavia, correggere le incoerenze di indici non cluster tramite la ricompilazione dell'indice online, in quanto il meccanismo di ricompilazione online utilizza l'indice non cluster esistente come base per la ricompilazione e di conseguenza l'incoerenza persiste. La ricompilazione dell'indice offline, invece, forza l'analisi dell'indice cluster (o dell'heap). L'incoerenza viene quindi rimossa. Come nelle versioni precedenti, il metodo consigliato per il recupero in seguito all'individuazione di incoerenze consiste nel ripristino da backup dei dati interessati. È tuttavia possibile correggere le incoerenze dell'indice tramite la ricompilazione offline dell'indice non cluster. Per ulteriori informazioni, vedere DBCC CHECKDB (Transact-SQL).
Per ricompilare un indice columnstore cluster, SQL Server:
Acquisisce un blocco esclusivo sulla tabella o partizione durante la ricompilazione. I dati sono "offline" e non disponibili durante la ricompilazione.
Deframmenta il columnstore eliminando fisicamente le righe eliminate in modo logico dalla tabella; i byte eliminati vengono recuperati sui supporti fisici.
Legge tutti i dati dell'indice columnstore originale, incluso il deltastore. Combina i dati in nuovi rowgroup e comprime i rowgroup nel columnstore.
Richiede spazio sul supporto fisico per archiviare due copie dell'indice columnstore durante la ricompilazione. Al termine della ricompilazione, SQL Server elimina l'indice columnstore cluster originale.
Riorganizzazione di indici
La riorganizzazione di un indice richiede una quantità minima di risorse di sistema. Questa operazione deframmenta il livello foglia di indici cluster e non cluster di tabelle e viste tramite il riordinamento fisico delle pagine al livello foglia in base all'ordine logico, da sinistra verso destra, dei nodi foglia. La riorganizzazione consente inoltre di compattare le pagine di indice in base al valore del fattore di riempimento esistente. Per visualizzare l'impostazione del fattore di riempimento, utilizzare sys.indexes.
Quando viene specificata la parola chiave ALL, vengono riorganizzati gli indici relazionali, sia cluster sia non cluster, e gli indici XML della tabella. La parola chiave ALL prevede alcune restrizioni. Per informazioni, vedere la relativa definizione nella sezione Argomenti.
Per riorganizzare un indice columnstore cluster, in SQL Server tutti i rowgroup contrassegnati come CLOSED vengono spostati nel columnstore. La riorganizzazione non è necessaria per spostare i rowgroup CLOSED nel columnstore. Tramite il processo tuple-mover verranno infine trovati e spostati tutti i rowgroup CLOSED. Tuple-mover è un processo a thread singolo e potrebbe non consentire uno spostamento sufficientemente rapido dei rowgroup per il carico di lavoro. Per assicurarsi che i rowgroup vengano spostati dopo essere stati chiusi, è possibile eseguire ALTER INDEX REORGANIZE dopo ogni carico.
Per ulteriori informazioni, vedere Riorganizzare e ricompilare gli indici.
Disabilitazione di indici
La disabilitazione di un indice impedisce agli utenti di accedere all'indice e, nel caso di indici cluster, ai dati della tabella sottostante. La definizione dell'indice rimane archiviata nel catalogo di sistema. La disabilitazione di un indice non cluster o di un indice cluster di una vista elimina fisicamente i dati dell'indice. La disabilitazione di un indice cluster impedisce l'accesso ai dati, i quali tuttavia rimangono archiviati in forma non gestita nell'albero B fino all'eliminazione o alla ricompilazione dell'indice. Per visualizzare lo stato di un indice abilitato o disabilitato, eseguire una query sulla colonna is_disabled della vista del catalogo sys.indexes.
Se una tabella è inclusa in una pubblicazione per la replica transazionale, non è possibile disabilitare gli indici associati a colonne chiave primaria. Questi indici sono necessari per la replica. Per disabilitare un indice, è innanzitutto necessario eliminare la tabella dalla pubblicazione. Per ulteriori informazioni, vedere Pubblicazione di dati e oggetti di database.
Per abilitare l'indice, utilizzare l'istruzione ALTER INDEX REBUILD oppure CREATE INDEX WITH DROP_EXISTING. Quando l'opzione ONLINE è impostata su ON, non è possibile ricompilare un indice cluster disabilitato. Per ulteriori informazioni, vedere Disabilitazione di indici e vincoli.
Impostazione delle opzioni
È possibile impostare le opzioni ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY e STATISTICS_NORECOMPUTE per un indice specificato senza ricompilare o riorganizzare l'indice. I valori modificati vengono applicati immediatamente all'indice. Per visualizzare tali impostazioni, utilizzare sys.indexes. Per ulteriori informazioni, vedere Impostare le opzioni di indice.
Opzioni per blocchi di riga e di pagina
Se ALLOW_ROW_LOCKS = ON e ALLOW_PAGE_LOCK = ON, sono consentiti blocchi di riga, di pagina e di tabella per l'accesso all'indice. Motore di database sceglie il blocco appropriato e può eseguire un'escalation del blocco da un blocco di riga o di pagina a un blocco di tabella.
Se ALLOW_ROW_LOCKS = OFF e ALLOW_PAGE_LOCK = OFF, sono consentiti solo blocchi a livello di tabella per l'accesso all'indice.
Se si specifica la parola chiave ALL durante l'impostazione di opzioni per blocchi di riga o di pagina, le impostazioni vengono applicate a tutti gli indici. Se la tabella sottostante è un heap, le impostazioni vengono applicate nei modi seguenti:
ALLOW_ROW_LOCKS = ON o OFF |
Viene applicata all'heap e a tutti gli indici non cluster associati. |
ALLOW_PAGE_LOCKS = ON |
Viene applicata all'heap e a tutti gli indici non cluster associati. |
ALLOW_PAGE_LOCKS = OFF |
Viene applicata agli indici non cluster. Ciò significa che negli indici non cluster non è consentito alcun blocco a livello di pagina. Nell'heap non sono consentiti solo i blocchi condivisi (S), di aggiornamento (U) ed esclusivi (X) per la pagina. Il Motore di database può comunque acquisire un blocco preventivo a livello di pagina (IS, IU o IX) per scopi interni. |
Operazioni sugli indici online
Quando si ricompila un indice e l'opzione ONLINE è impostata su ON, gli oggetti sottostanti, ovvero le tabelle e gli indici associati, risultano disponibili per query e operazioni di modifica dei dati. È inoltre possibile ricompilare online una parte di indice che risiede in una singola partizione. I blocchi di tabella esclusivi vengono mantenuti attivi per un periodo di tempo molto limitato durante il processo di modifica.
La riorganizzazione di un indice viene sempre eseguita online. Questo processo non mantiene attivi i blocchi a lungo termine e non blocca pertanto le query o gli aggiornamenti in corso.
In una stessa tabella o partizione di tabella è possibile eseguire in modo simultaneo solo le operazioni sugli indici online seguenti:
Creazione di più indici non cluster.
Riorganizzazione di indici diversi della stessa tabella.
Riorganizzazione di indici diversi durante la ricompilazione di indici non sovrapposti della stessa tabella.
Qualsiasi altra operazione sugli indici online eseguita nello stesso istante avrà esito negativo. Non è ad esempio possibile ricompilare due o più indici della stessa tabella simultaneamente né creare un nuovo indice durante la ricompilazione di un indice esistente nella stessa tabella.
Per ulteriori informazioni, vedere Eseguire operazioni online sugli indici.
WAIT_AT_LOW_PRIORITY
Per eseguire l'istruzione DDL per una ricompilazione dell'indice online, è necessario completare tutte le transazioni bloccanti attive in esecuzione in una specifica tabella. Quando la ricompilazione dell'indice online viene eseguita, blocca tutte le nuove transazioni pronte per l'esecuzione in questa tabella. Sebbene la durata del blocco della ricompilazione dell'indice online sia molto breve, l'attesa del completamento di tutte le transazioni aperte in una tabella specificata e il blocco dell'avvio di nuove transazioni potrebbero influire in modo significativo sulla velocità effettiva, provocando un rallentamento o un timeout del carico di lavoro e limitando notevolmente l'accesso alla tabella sottostante. L'opzione WAIT_AT_LOW_PRIORITY consente agli amministratori di database di gestire i blocchi S e Sch-M necessari per le ricompilazioni degli indici online, nonché di selezionare una tra tre opzioni. In tutti e tre i casi, se durante il tempo di attesa, (MAX_DURATION = n [minutes]), non sono presenti attività di blocco, la ricompilazione dell'indice online viene eseguita immediatamente senza attendere il completamento dell'istruzione DDL.
Restrizioni relative agli indici spaziali
Quando si ricompila un indice spaziale, la tabella utente sottostante non è disponibile per tutta la durata dell'operazione sull'indice, in quanto l'indice spaziale acquisisce un blocco di schema.
Il vincolo PRIMARY KEY nella tabella utente non può essere modificato se in una colonna di tale tabella è definito un indice spaziale. Per modificare il vincolo PRIMARY KEY, eliminare innanzitutto ogni indice spaziale dalla tabella. Dopo avere modificato il vincolo PRIMARY KEY, è possibile ricreare ognuno degli indici spaziali.
In un'operazione di ricompilazione di una singola partizione, non è possibile specificare indici spaziali. È tuttavia possibile specificare indici spaziali in una ricompilazione di partizioni completa.
Per modificare opzioni specifiche di un indice spaziale, ad esempio BOUNDING_BOX o GRID, è possibile utilizzare un'istruzione CREATE SPATIAL INDEX che specifica DROP_EXISTING = ON oppure eliminare l'indice spaziale e crearne un nuovo. Per un esempio, vedere CREATE SPATIAL INDEX (Transact-SQL).
Compressione dei dati
Per ulteriori informazioni sulla compressione dei dati, vedere Compressione dei dati.
Per valutare il modo in cui la modifica della compressione di PAGE e ROW influirà su una tabella, un indice o una partizione, utilizzare la stored procedure sp_estimate_data_compression_savings.
Agli indici partizionati vengono applicate le restrizioni seguenti:
Quando si utilizza ALTER INDEX ALL ..., non è possibile modificare l'impostazione di compressione di una singola partizione se la tabella include indici non allineati.
La sintassi ALTER INDEX <index> ... REBUILD PARTITION ... consente di ricompilare la partizione specificata dell'indice.
La sintassi ALTER INDEX <index> ... La sintassi REBUILD WITH ... consente di ricompilare tutte le partizioni dell'indice.
Statistiche
Quando si esegue ALTER INDEX ALL … su una tabella, vengono aggiornate solo le statistiche associate agli indici. Le statistiche automatiche o manuali create sulla tabella, anziché su un indice, non vengono aggiornate.
Autorizzazioni
Per eseguire l'istruzione ALTER INDEX, è necessario disporre almeno dell'autorizzazione ALTER per la tabella o la vista.
Esempi
A.Ricompilazione di un indice
Nell'esempio seguente viene ricompilato un singolo indice della tabella Employee nel database AdventureWorks2012.
ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee
REBUILD;
B.Ricompilazione di tutti gli indici di una tabella e impostazione di opzioni
Nell'esempio seguente viene specificata la parola chiave ALL. In questo modo vengono ricompilati tutti gli indici associati alla tabella Production.Product nel database AdventureWorks2012. Vengono inoltre specificate tre opzioni.
Si applica a: SQL Server 2008 - SQL Server 2014. |
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
Nell'esempio seguente viene aggiunta l'opzione ONLINE, inclusa l'opzione di blocco con priorità bassa, e viene aggiunta l'opzione di compressione di riga.
Si applica a: SQL Server 2014 - SQL Server 2014. |
ALTER INDEX ALL ON Production.Product
REBUILD WITH
(
FILLFACTOR = 80,
SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON,
ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS ) ),
DATA_COMPRESSION = ROW
)
;
C.Ricompilazione di un indice columnstore cluster
Il primo passaggio consiste nel preparare una tabella FactInternetSales2 con un indice columnstore cluster e nell'inserimento di dati dalle prime quattro colonne.
USE AdventureWorksDW2012;
GO
CREATE TABLE dbo.FactInternetSales2 (
ProductKey [int] NOT NULL,
OrderDateKey [int] NOT NULL,
DueDateKey [int] NOT NULL,
ShipDateKey [int] NOT NULL);
CREATE CLUSTERED COLUMNSTORE INDEX cci_FactInternetSales2
ON dbo.FactInternetSales2;
INSERT INTO dbo.FactInternetSales2
SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey
FROM dbo.FactInternetSales;
SELECT * FROM sys.column_store_row_groups;
Il risultato è un rowgroup OPEN, il che significa che in SQL Server si attenderà che vengano aggiunte altre righe prima che il rowgroup venga chiuso e i dati vengano spostati nel columnstore. Con l'istruzione successiva si ricompila l'indice columnstore cluster.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;
SELECT * FROM sys.column_store_row_groups;
I risultati dell'istruzione SELECT mostrano che il rowgroup è COMPRESSED, il che significa che i segmenti di colonna del rowgroup vengono compressi e archiviati nel columnstore.
D.Ricompilazione di un indice con la compattazione di dati LOB
Nell'esempio seguente viene riorganizzato un singolo indice cluster nel database AdventureWorks2012. Poiché l'indice contiene un tipo di dati LOB al livello foglia, l'istruzione compatta inoltre tutte le pagine contenenti dati LOB. Si noti che non è necessario specificare l'opzione WITH (LOB_COMPACTION) perché il valore predefinito è ON.
ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto
REORGANIZE ;
E.Impostazione di opzioni per un indice
Nell'esempio seguente vengono impostate diverse opzioni per l'indice AK_SalesOrderHeader_SalesOrderNumber nel database AdventureWorks2012.
Si applica a: SQL Server 2008 - SQL Server 2014. |
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
Sales.SalesOrderHeader
SET (
STATISTICS_NORECOMPUTE = ON,
IGNORE_DUP_KEY = ON,
ALLOW_PAGE_LOCKS = ON
) ;
GO
F.Disabilitazione di un indice
Nell'esempio seguente viene disabilitato un indice non cluster della tabella Employee nel database AdventureWorks2012.
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee
DISABLE ;
G.Disabilitazione dei vincoli
Nell'esempio seguente viene disabilitato un vincolo PRIMARY KEY disabilitando l'indice PRIMARY KEY nel database AdventureWorks2012. Il vincolo FOREIGN KEY della tabella sottostante viene disabilitato automaticamente e viene visualizzato un messaggio di avviso.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department
DISABLE ;
Nel set di risultati viene restituito il messaggio di avviso seguente.
Warning: Foreign key 'FK_EmployeeDepartmentHistory_Department_DepartmentID'
on table 'EmployeeDepartmentHistory' referencing table 'Department'
was disabled as a result of disabling the index 'PK_Department_DepartmentID'.
H.Abilitazione di vincoli
Nell'esempio seguente vengono abilitati i vincoli PRIMARY KEY e FOREIGN KEY disabilitati nell'esempio F.
Il vincolo PRIMARY KEY viene abilitato tramite la ricompilazione dell'indice PRIMARY KEY.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department
REBUILD ;
Viene quindi abilitato il vincolo FOREIGN KEY.
ALTER TABLE HumanResources.EmployeeDepartmentHistory
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;
GO
I.Ricompilazione di un indice partizionato
Nell'esempio seguente viene ricompilata una singola partizione, con numero 5, dell'indice partizionato IX_TransactionHistory_TransactionDate nel database AdventureWorks2012. La partizione 5 viene ricompilata online e il tempo di attesa di 10 minuti per il blocco con priorità bassa viene applicato separatamente a ogni blocco acquisito dall'operazione di ricompilazione dell'indice. Se durante questo periodo di tempo non è possibile ottenere il blocco per completare la ricompilazione dell'indice, l'istruzione dell'operazione di ricompilazione viene interrotta.
Si applica a: SQL Server 2014 - SQL Server 2014. |
-- Verify the partitioned indexes.
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);
GO
--Rebuild only partition 5.
ALTER INDEX IX_TransactionHistory_TransactionDate
ON Production.TransactionHistory
REBUILD Partition = 5
WITH ( ONLINE = ON ( WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF )))
;
GO
J.Modifica dell'impostazione di compressione di un indice
Nell'esempio seguente viene ricompilato un indice in una tabella rowstore non partizionata.
Si applica a: SQL Server 2008 - SQL Server 2014. |
ALTER INDEX IX_INDEX1
ON T1
REBUILD
WITH ( DATA_COMPRESSION = PAGE );
GO
Nell'esempio seguente viene ricompilato un indice columnstore cluster per l'utilizzo della compressione dell'archivio e viene illustrato come rimuovere tale compressione. Il risultato finale consisterà nell'utilizzo della sola compressione columnstore.
Si applica a: SQL Server 2014 - SQL Server 2014. |
--Prepare the example by creating a table with a clustered columnstore index.
CREATE TABLE SimpleTable (
ProductKey [int] NOT NULL,
OrderDateKey [int] NOT NULL,
DueDateKey [int] NOT NULL,
ShipDateKey [int] NOT NULL
);
CREATE CLUSTERED INDEX cci_SimpleTable ON SimpleTable (ProductKey);
CREATE CLUSTERED COLUMNSTORE INDEX cci_SimpleTable
ON SimpleTable
WITH ( DROP_EXISTING = ON );
--Compress the table further by using archival compression.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH ( DATA_COMPRESSION = COLUMNSTORE_ARCHIVE );
--Remove the archive compression and only use columnstore compression.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH ( DATA_COMPRESSION = COLUMNSTORE );
GO
Per ulteriori esempi sulla compressione dei dati, vedere Compressione dei dati.
Vedere anche
Riferimento
CREATE SPATIAL INDEX (Transact-SQL)
CREATE XML INDEX (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)
Concetti
Disabilitazione di indici e vincoli