Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile creare indici cluster in tabelle in SQL Server 2014 usando SQL Server Management Studio o Transact-SQL. A parte poche eccezioni, ogni tabella deve disporre di un indice cluster. Oltre a migliorare le prestazioni di esecuzione delle query, un indice può essere ricompilato o riorganizzato su richiesta per controllare la frammentazione della tabella. È inoltre possibile creare un indice cluster in una vista. Gli indici cluster sono definiti nell'argomento Clustered and Nonclustered Indexes Described (Indici cluster e non cluster).
Contenuto dell'articolo
Prima di iniziare:
Per creare un indice cluster in una tabella utilizzando:
Prima di iniziare
Modalità di implementazione tipiche
Gli indici cluster vengono implementati nei modi seguenti:
Vincoli PRIMARY KEY e UNIQUE
Quando si crea un vincolo PRIMARY KEY, viene automaticamente creato un indice cluster univoco nella colonna o nelle colonne se nella tabella non esiste già un indice cluster e non si specifica un indice non cluster univoco. La colonna chiave primaria non può supportare i valori NULL.
Quando si crea un vincolo UNIQUE, viene creato un indice non cluster univoco per applicare un vincolo UNIQUE per impostazione predefinita. È possibile specificare un indice cluster univoco se nella tabella non ne esiste già uno.
A un indice creato come parte del vincolo viene automaticamente assegnato lo stesso nome del vincolo. Per altre informazioni, vedere Vincoli di chiave primaria ed esterna e vincoli univoci e vincoli CHECK.
Indice indipendente da un vincolo
È possibile creare un indice cluster in una colonna diversa dalla colonna chiave primaria a condizione che sia stato specificato un vincolo di chiave primaria non cluster.
Limitazioni e restrizioni
Quando viene creata una struttura dell'indice cluster, è necessario spazio su disco per la struttura vecchia (origine) e per quella nuova (destinazione) nei file e filegroup appropriati. La struttura precedente non viene deallocata fino a quando non avviene il commit della transazione completa. Potrebbe anche essere necessario spazio su disco temporaneo aggiuntivo per l'ordinamento. Per altre informazioni, vedere Disk Space Requirements for Index DDL Operations.
Se viene creato un indice cluster in un heap con molti indici non cluster esistenti, tutti gli indici non cluster devono essere ricompilati in modo che contengano il valore della chiave di clustering anziché l'identificatore di riga (RID, Row Identifier). Analogamente, se un indice cluster viene eliminato in una tabella con diversi indici non cluster, tutti gli indici non cluster vengono ricompilati come parte dell'operazione DROP. Questa operazione può richiedere molto tempo nelle tabelle di grandi dimensioni.
La strategia ottimale per la compilazione di indici per tabelle di grandi dimensioni consiste nel compilare innanzitutto l'indice cluster e quindi eventuali indici non cluster. È consigliabile impostare l'opzione ONLINE su ON quando si creano indici in tabelle esistenti. Quando è impostato su ON, i blocchi delle tabelle a lungo termine non sono mantenuti. così da permettere alle query o agli aggiornamenti di continuare sulla tabella sottostante. Per altre informazioni, vedere Perform Index Operations Online.
La chiave di indice di un indice cluster non può contenere
varcharcolonne con dati esistenti nell'unità di allocazione ROW_OVERFLOW_DATA. Se viene creato un indice cluster in unavarcharcolonna e i dati esistenti si trovano nell'unità di allocazione IN_ROW_DATA, le azioni di inserimento o aggiornamento successive nella colonna che eseguirebbero il push dei dati all'esterno della riga avranno esito negativo. Per ottenere informazioni sulle tabelle che potrebbero contenere dati di overflow di riga, usare la funzione di gestione dinamica sys.dm_db_index_physical_stats (Transact-SQL).
Sicurezza
Autorizzazioni
È richiesta l'autorizzazione ALTER per una tabella o una vista. L'utente deve essere un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_ddladmin e db_owner .
Uso di SQL Server Management Studio
Per creare un indice cluster tramite Esplora oggetti
In Esplora oggetti, espandere la tabella su cui si desidera creare un indice clusterizzato.
Fare clic con il pulsante destro del mouse sulla cartella Indici, scegliere Nuovo indice e selezionare Indice cluster.
Nella pagina Generale della finestra di dialogo Nuovo indice immettere il nome del nuovo indice nella casella Nome indice .
In Colonne chiave indicefare clic su Aggiungi.
Nella finestra di dialogo Seleziona colonne danome_tabella, selezionare la casella di controllo della colonna della tabella da aggiungere all'indice clusterizzato.
Fare clic su OK.
Nella finestra di dialogo Nuovo indice fare clic su OK.
Per creare un indice raggruppato tramite Progettazione tabelle
In Esplora oggetti, espandere il database in cui si desidera creare una tabella con un indice clusterizzato.
Fare clic con il pulsante destro del mouse sulla cartella Tabelle e scegliere Nuova tabella.
Creare una nuova tabella con il metodo tradizionale. Per altre informazioni, vedere Creare tabelle (motore di database).
Fare clic con il pulsante destro del mouse sulla nuova tabella creata in precedenza e scegliere Progetta.
Scegliere Indici/chiavi nel menu Progettazione tabelle.
Nella finestra di dialogo Indici/chiavi fare clic su Aggiungi.
Selezionare il nuovo indice dalla casella di testo Chiave o indice primario/univoco selezionato .
Nella griglia selezionare Crea come CLUSTERED, quindi selezionare Sì dall'elenco a discesa a destra della proprietà.
Fare clic su Close.
Nel menu File fare clic su Salvanome_tabella.
Uso di Transact-SQL
Per creare un indice cluster
In Esplora oggetti, collegarsi a un'istanza di Database Engine.
Sulla barra Standard fare clic su Nuova query.
Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.
USE AdventureWorks2012; GO -- Create a new table with three columns. CREATE TABLE dbo.TestTable (TestCol1 int NOT NULL, TestCol2 nchar(10) NULL, TestCol3 nvarchar(50) NULL); GO -- Create a clustered index called IX_TestTable_TestCol1 -- on the dbo.TestTable table using the TestCol1 column. CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1); GO
Per altre informazioni, vedere CREATE INDEX (Transact-SQL).