- 02/17/2017
- 5 minuti per leggere
-
- M
- M
- v
- c
- s
-
+1
Si applica a: QL Server (tutte le versioni supportate) Azure SQL Database
Questo argomento descrive come creare un indice unico su una tabella in SQL Server utilizzando SQL Server Management Studio o Transact-SQL. Un indice unico garantisce che la chiave dell’indice non contenga valori duplicati e che quindi ogni riga della tabella sia in qualche modo unica. Non ci sono differenze significative tra la creazione di un vincolo UNICO e la creazione di un indice unico che è indipendente da un vincolo. La convalida dei dati avviene nello stesso modo, e l’ottimizzatore di query non fa differenza tra un indice unico creato da un vincolo o creato manualmente. Tuttavia, la creazione di un vincolo UNIQUE sulla colonna rende chiaro l’obiettivo dell’indice. Per maggiori informazioni sui vincoli UNIQUE, vedere Vincoli unici e Vincoli di controllo.
Quando si crea un indice unico, è possibile impostare un’opzione per ignorare le chiavi duplicate. Se questa opzione è impostata su Yes e si tenta di creare chiavi duplicate aggiungendo dati che interessano più righe (con l’istruzione INSERT), la riga contenente un duplicato non viene aggiunta. Se è impostata a No, l’intera operazione di inserimento fallisce e tutti i dati vengono riportati indietro.
Nota
Non puoi creare un indice unico su una singola colonna se quella colonna contiene NULL in più di una riga. Allo stesso modo, non potete creare un indice unico su colonne multiple se la combinazione di colonne contiene NULL in più di una riga. Questi sono trattati come valori duplicati ai fini dell’indicizzazione.
In questo argomento
-
Prima di iniziare:
Benefici di un indice unico
Implementazioni tipiche
Limitazioni e restrizioni
Sicurezza
-
Per creare un indice unico su una tabella, usando:
SQL Server Management Studio
Transact-SQL
Prima di iniziare
Benefici di un indice unico
-
Gli indici unici a più colonne garantiscono che ogni combinazione di valori nella chiave dell’indice sia unica. Per esempio, se un indice unico viene creato su una combinazione di colonne LastName, FirstName e MiddleName, due righe della tabella non possono avere la stessa combinazione di valori per queste colonne.
-
A patto che i dati di ogni colonna siano unici, è possibile creare sia un indice unico clustered che più indici unici non clustered sulla stessa tabella.
-
Gli indici unici garantiscono l’integrità dei dati delle colonne definite.
-
Gli indici unici forniscono informazioni aggiuntive utili all’ottimizzatore di query che può produrre piani di esecuzione più efficienti.
Implementazioni tipiche
Gli indici unici sono implementati nei seguenti modi:
-
PRIMARY KEY o vincolo UNIQUE
Quando si crea un vincolo PRIMARY KEY, un indice unico clustered sulla colonna o sulle colonne viene creato automaticamente se non esiste già un indice clustered sulla tabella e non si specifica un indice unico non clustered. La colonna chiave primaria non può permettere valori NULL.
Quando create un vincolo UNIQUE, un indice unico non clusterato viene creato per imporre un vincolo UNIQUE per default. Puoi specificare un indice unico clustered se un indice clustered sulla tabella non esiste già.
Per maggiori informazioni, vedi Vincoli unici e Vincoli di controllo e Vincoli a chiave primaria ed esterna.
-
Indice indipendente da un vincolo
Su una tabella possono essere definiti più indici unici non raggruppati.
Per maggiori informazioni, vedere CREATE INDEX (Transact-SQL).
-
Vista indicizzata
Per creare una vista indicizzata, un indice unico raggruppato viene definito su una o più colonne della vista. La vista viene eseguita e l’insieme dei risultati viene memorizzato nel livello foglia dell’indice nello stesso modo in cui i dati della tabella vengono memorizzati in un indice clustered. Per maggiori informazioni, vedi Creare viste indicizzate.
Limitazioni e restrizioni
-
Un indice unico, un vincolo UNIQUE o un vincolo PRIMARY KEY non possono essere creati se esistono valori chiave duplicati nei dati.
-
Un indice unico non clustered può contenere colonne non chiave incluse. Per maggiori informazioni, vedi Creare indici con colonne incluse.
Sicurezza
Permessi
Richiede il permesso ALTER sulla tabella o vista. L’utente deve essere membro del ruolo fisso sysadmin del server o dei ruoli fissi db_ddladmin e db_owner del database.
Usando SQL Server Management Studio
Per creare un indice unico usando il Table Designer
-
In Object Explorer, espandi il database che contiene la tabella sulla quale vuoi creare un indice unico.
-
Espandi la cartella Tabelle.
-
Clicca con il tasto destro del mouse sulla tabella su cui vuoi creare un indice unico e seleziona Progettazione.
-
Nel menu Table Designer, seleziona Indexes/Keys.
-
Nella finestra di dialogo Indexes/Keys, clicca Add.
-
Seleziona il nuovo indice nella casella di testo Selected Primary/Unique Key or Index.
-
Nella griglia principale, sotto (Generale), seleziona Tipo e poi scegli Indice dalla lista.
-
Seleziona Colonne, e poi clicca sull’ellissi (…).
-
Nella finestra di dialogo Colonne indice, sotto Nome colonna, seleziona le colonne che vuoi indicizzare. Puoi selezionare fino a 16 colonne. Per prestazioni ottimali, seleziona solo una o due colonne per indice. Per ogni colonna selezionata, indica se l’indice organizza i valori di questa colonna in ordine crescente o decrescente.
-
Quando tutte le colonne per l’indice sono selezionate, clicca su OK.
-
Nella griglia, sotto (General), seleziona Is Unique e poi scegli Yes dalla lista.
-
Optional: Nella griglia principale, sotto Table Designer, seleziona Ignore Duplicate Keys e poi scegli Yes dalla lista. Fallo se vuoi ignorare i tentativi di aggiungere dati che creerebbero una chiave duplicata nell’indice unico.
-
Clicca Close.
-
Nel menu File, clicca su Savetable_name.
Crea un indice unico usando Object Explorer
-
In Object Explorer, espandi il database che contiene la tabella su cui vuoi creare un indice unico.
-
Espandi la cartella Tables.
-
Espandi la tabella su cui vuoi creare un indice unico.
-
Clicca con il tasto destro del mouse sulla cartella Indexes, punta su New Index, e seleziona Non-Clustered Index….
-
Nella finestra di dialogo Nuovo indice, nella pagina Generale, inserisci il nome del nuovo indice nella casella Nome indice.
-
Seleziona la casella di controllo Unique.
-
In colonne chiave dell’indice, clicca su Add….
-
Nella finestra di dialogo Select Columns fromtable_name, seleziona la o le caselle di controllo della o delle colonne della tabella da aggiungere all’indice unico.
-
Clicca OK.
-
Nella finestra di dialogo New Index, clicca OK.
Usando Transact-SQL
Per creare un indice unico su una tabella
-
In Object Explorer, connettiti a un’istanza di Database Engine.
-
Sulla barra standard, clicca su Nuova query.
-
Copia e incolla il seguente esempio nella finestra della query e clicca su Execute.
USE AdventureWorks2012; GO -- Find an existing index named AK_UnitMeasure_Name and delete it if found IF EXISTS (SELECT name from sys.indexes WHERE name = N'AK_UnitMeasure_Name') DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure; GO -- Create a unique index called AK_UnitMeasure_Name -- on the Production.UnitMeasure table using the Name column. CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure (Name); GO
Per maggiori informazioni, vedi CREATE INDEX (Transact-SQL).