index_option (Transact-SQL)

Specifica un set di opzioni che possono essere applicate a un indice incluso in una definizione di vincolo creata tramite l'istruzione ALTER TABLE.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

{ 
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF } 
  | ONLINE = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE |ROW | PAGE}
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
            [ , ...n ] ) ]
}

<range> ::= 
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = {NONE | ROW | PAGE } }
}

Argomenti

  • PAD_INDEX = { ON | OFF }
    Specifica il riempimento dell'indice. Il valore predefinito è OFF.

    • ON
      La percentuale di spazio libero specificata da FILLFACTOR viene applicata alle pagine di livello intermedio dell'indice.

    • Omissione di OFF o fillfactor
      Le pagine di livello intermedio vengono riempite quasi completamente, ma viene lasciato spazio sufficiente per almeno una riga avente le dimensioni massime consentite dall'indice, in base al set di chiavi nelle pagine intermedie.

  • FILLFACTOR **=**fillfactor
    Specifica una percentuale indicante il livello di riempimento del livello foglia di ogni pagina di indice applicato da Motore di database durante la creazione o la modifica dell'indice. Il valore specificato deve essere un valore integer compreso tra 1 e 100. Il valore predefinito è 0.

    [!NOTA]

    I valori 0 e 100 relativi al fattore di riempimento sono equivalenti.

  • 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 ricostruzione dell'indice. L'opzione non ha alcun effetto se si esegue CREATE INDEX, ALTER INDEX o UPDATE. 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 univocità.

    • 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, gli indici non univoci, gli 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 vengono ricalcolate le statistiche. Il valore predefinito è OFF.

    • ON
      Le statistiche obsolete non vengono ricalcolate automaticamente.

    • OFF
      È attivato l'aggiornamento automatico delle statistiche.

  • ALLOW_ROW_LOCKS = { ON | OFF }
    Specifica se sono consentiti blocchi a livello di riga. Il valore predefinito è ON.

    • ON
      I blocchi a livello di riga sono consentiti durante l'accesso all'indice. Motore di database determina quando utilizzare blocchi a livello di riga.

    • OFF
      I blocchi a livello di riga non vengono utilizzati.

  • ALLOW_PAGE_LOCKS = { ON | OFF }
    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. Motore di database determina quando utilizzare blocchi a livello di pagina.

    • OFF
      I blocchi a livello di pagina non vengono utilizzati.

  • SORT_IN_TEMPDB = { ON | OFF }
    Specifica se archiviare i risultati dell'ordinamento in tempdb. Il valore predefinito è OFF.

    • ON
      I risultati intermedi dell'ordinamento utilizzati per creare l'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 creazione dell'indice sarà tuttavia maggiore.

    • OFF
      I risultati intermedi dell'ordinamento sono archiviati nello stesso database dell'indice.

  • ONLINE = { ON | OFF }
    Specifica se le tabelle sottostanti e gli indici associati sono disponibili per le query e per modifiche dei dati durante l'operazione sull'indice. Il valore predefinito è OFF.

    [!NOTA]

    Non è possibile creare in linea indici non cluster univoci, tra cui gli indici creati a causa di un vincolo UNIQUE o PRIMARY KEY.

    • ON
      I blocchi a lungo termine a livello di tabella non vengono mantenuti per la durata dell'operazione sull'indice. Durante la fase principale dell'operazione viene mantenuto solo un blocco preventivo condiviso (IS, Intent Shared) sulla tabella di origine, in modo da consentire l'esecuzione di query o l'aggiornamento della tabella sottostante e degli indici. All'inizio dell'operazione viene mantenuto un blocco condiviso (S) sull'oggetto di origine per un periodo molto breve. Al termine dell'operazione di creazione di un indice non cluster, per un breve periodo viene acquisito un blocco condiviso (S) sull'origine. Al termine dell'operazione di creazione o di eliminazione di un indice cluster in linea o di ricostruzione di un indice cluster o non cluster, viene acquisito un blocco di modifica dello schema (SCH-M). Durante la creazione di un indice per una tabella temporanea locale non è possibile impostare ONLINE su ON.

    • OFF
      I blocchi a livello di tabella vengono applicati per la durata dell'operazione sull'indice. Un'operazione sull'indice non in linea che crea, ricostruisce o elimina un indice cluster oppure ricostruisce o elimina un indice non cluster acquisisce un blocco di modifica dello schema (SCH-M) sulla tabella. Tale blocco impedisce agli utenti di accedere alla tabella sottostante per la durata dell'operazione. Un'operazione sull'indice non in linea 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 in linea. Per ulteriori informazioni sui blocchi, vedere Modalità blocco.

    [!NOTA]

    Le operazioni sugli indici in linea sono disponibili solo nelle edizioni Enterprise, Developer ed Evaluation di SQL Server.

  • MAXDOP **=**max_degree_of_parallelism
    Ignora l'opzione di configurazione max degree of parallelism per tutta la durata dell'operazione sull'indice. Per ulteriori informazioni, vedere Opzione max degree of parallelism. Utilizzare MAXDOP per limitare il numero di processori utilizzati in un'esecuzione di piani paralleli. Il valore massimo è 64 processori.

    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 sugli indici 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 a indici paralleli.

    [!NOTA]

    Le operazioni parallele sugli indici sono disponibili solo nelle edizioni Enterprise, Developer ed Evaluation di SQL Server.

  • DATA_COMPRESSION
    Specifica l'opzione di compressione dei dati per la tabella, il numero di partizione o l'intervallo di partizioni specificato. Sono disponibili le opzioni seguenti:

    • NONE
      La tabella o le partizioni specificate non vengono compresse.

    • ROW
      La tabella o le partizioni specificate vengono compresse utilizzando la compressione di riga.

    • PAGE
      La tabella o le partizioni specificate vengono compresse utilizzando la compressione di pagina.

    Per ulteriori informazioni sulla compressione, vedere Creazione di tabelle e di indici compressi.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    Specifica le partizioni alle quali si applica l'impostazione DATA_COMPRESSION. Se la tabella non è partizionata, l'argomento ON PARTITIONS genererà un errore. Se la clausola ON PARTITIONS non viene specificata, l'opzione DATA_COMPRESSION verrà applicata a tutte le partizioni di una tabella partizionata.

    Per specificare <partition_number_expression>, è possibile effettuare le seguenti operazioni:

    • Fornire il numero di una partizione, ad esempio ON PARTITIONS (2).

    • Specificare i numeri di partizione per più partizioni singole separati da virgole, ad esempio ON PARTITIONS (1, 5).

    • Fornire sia intervalli che 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)
    )
    
  • <single_partition_rebuild__option>
    Nella maggior parte dei casi, la ricostruzione di un indice determina la ricostruzione di tutte le partizioni di un indice partizionato. Le opzioni seguenti, in caso di applicazione a una partizione singola, non ricostruiscono tutte le partizioni.

    • SORT_IN_TEMPDB

    • MAXDOP

    • DATA_COMPRESSION

Osservazioni

Per una descrizione completa delle opzioni per gli indici, vedere CREATE INDEX (Transact-SQL).