Creare indici univoci
In questo argomento si illustra come creare un indice univoco per una tabella in SQL Server 2012 tramite SQL Server Management Studio o Transact-SQL. Un indice univoco consente di garantire che nella chiave dell'indice non siano contenuti valori duplicati e che pertanto ogni riga della tabella sia univoca. Non vi sono differenze significative tra la creazione di un vincolo UNIQUE e la creazione di un indice univoco indipendente da un vincolo. La convalida dei dati viene eseguita nello stesso modo e da Query Optimizer non viene applicata alcuna distinzione tra un indice univoco creato tramite un vincolo o manualmente. Tuttavia, se si crea un vincolo UNIQUE nella colonna, l'obiettivo dell'indice è chiaro. Per ulteriori informazioni sui vincoli UNIQUE, vedere Vincoli UNIQUE e CHECK.
Quando si crea un indice univoco, è possibile impostare un'opzione che consente di ignorare le chiavi duplicate. Se questa opzione è impostata su Sì e si cerca di creare chiavi duplicate aggiungendo dati che coinvolgono più righe (utilizzando l'istruzione INSERT), la riga che contiene la chiave duplicata non verrà aggiunta. Se invece l'opzione è impostata su No, l'intera operazione non verrà completata e verrà eseguito il rollback di tutti i dati.
[!NOTA]
Non è possibile creare un indice univoco in un'unica colonna se in essa è contenuto il valore NULL in più righe. Analogamente, non è possibile creare un indice univoco su più colonne se la combinazione di colonne contiene il valore NULL in più righe. Ai fini dell'indicizzazione, questi valori sono considerati duplicati.
Contenuto dell'argomento
Prima di iniziare:
Vantaggi di un indice univoco
Modalità di implementazione tipiche
Limitazioni e restrizioni
Sicurezza
Per creare un indice univoco per una tabella utilizzando:
SQL Server Management Studio
Transact-SQL
Prima di iniziare
Vantaggi di un indice univoco
Gli indici univoci a più colonne consentono di garantire che ogni combinazione di valori nella chiave dell'indice sia univoca. Ad esempio, se si crea un indice univoco basato su una combinazione delle colonne LastName, FirstName e MiddleName, non è possibile che nella tabella siano incluse due righe in cui è presente la stessa combinazione di valori per queste colonne.
Se i dati in ogni colonna sono univoci, nella stessa tabella è possibile creare sia un indice cluster univoco sia più indici non cluster univoci.
Gli indici univoci consentono di garantire l'integrità dei dati delle colonne definite.
Gli indici univoci forniscono informazioni aggiuntive utili a Query Optimizer tramite cui è possibile produrre piani di esecuzione più efficienti.
Modalità di implementazione tipiche
Gli indici univoci vengono implementati nei modi seguenti:
Vincolo PRIMARY KEY o 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 cluster univoco per imporre un vincolo UNIQUE per impostazione predefinita. È possibile specificare un indice cluster univoco se nella tabella non ne esiste già uno.
Per ulteriori informazioni, vedere Vincoli UNIQUE e CHECK e Vincoli di chiavi primarie ed esterne.
Indice indipendente da un vincolo
In una tabella è possibile definire più indici non cluster.
Per ulteriori informazioni, vedere CREATE INDEX (Transact-SQL).
Vista indicizzata
Per creare una vista indicizzata, viene definito un indice cluster univoco in una o più colonne della vista. La vista viene eseguita e il set di risultati viene archiviato nel livello foglia allo stesso modo in cui vengono archiviati i dati della tabella in un indice cluster. Per ulteriori informazioni, vedere Creazione di viste indicizzate.
Limitazioni e restrizioni
Se nei dati sono presenti valori di chiave duplicati, non è possibile creare un indice univoco, un vincolo UNIQUE o un vincolo PRIMARY KEY.
In un indice non cluster univoco possono essere contenute colonne non chiave. Per ulteriori informazioni, vedere Creare indici con colonne incluse.
Sicurezza
Autorizzazioni
È richiesta l'autorizzazione ALTER per la tabella o la vista. L'utente deve essere un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_ddladmin e db_owner.
[Inizio pagina]
Utilizzo di SQL Server Management Studio
Per creare un indice univoco tramite Progettazione tabelle
In Esplora oggetti espandere il database contenente la tabella in cui si desidera creare un indice univoco.
Espandere la cartella Tabelle.
Fare clic con il pulsante destro del mouse sulla tabella nella quale creare un indice univoco e selezionare Progetta.
Selezionare Indici/chiavi nel menu Progettazione tabelle.
Nella finestra di dialogo Indici/chiavi fare clic su Aggiungi.
Selezionare il nuovo indice dalla casella di testo Indice o chiave primari/univoci selezionati.
In (Generale) nella griglia principale selezionare Tipo, quindi scegliere Indice dall'elenco.
Selezionare Colonne, quindi fare clic sul pulsante con i puntini di sospensione (…).
In Nome colonna della finestra di dialogo Colonne indice selezionare le colonne da indicizzare. È possibile selezionare fino a 16 colonne. Per ottenere prestazioni ottimali, selezionare una o due colonne per indice. Per ogni colonna selezionata, è possibile specificare se nell'indice i valori della colonna dovranno essere organizzati in ordine crescente o decrescente.
Una volta selezionate tutte le colonne per l'indice, fare clic su OK.
In (Generale) nella griglia principale selezionare Univoco, quindi scegliere Sì dall'elenco.
Facoltativo: In Progettazione tabelle nella griglia principale selezionare Ignora chiavi duplicate, quindi scegliere Sì dall'elenco. Eseguire questa operazione se si desidera ignorare i tentativi per aggiungere dati che comporterebbero la creazione di una chiave duplicata nell'indice univoco.
Scegliere Chiudi.
Scegliere Salva dal menu File table_name.
Creare un indice univoco tramite Esplora oggetti
In Esplora oggetti espandere il database contenente la tabella in cui si desidera creare un indice univoco.
Espandere la cartella Tabelle.
Espandere la tabella in cui si desidera creare un indice univoco.
Fare clic con il pulsante destro del mouse sulla cartella Indici, scegliere Nuovo indice e selezionare Indice non cluster.
Nella pagina Generale della finestra di dialogo Nuovo indice immettere il nome del nuovo indice nella casella Nome indice.
Selezionare la casella di controllo Univoco.
In Colonne chiave indice fare clic su Aggiungi.
Nella finestra di dialogo Seleziona colonne da table_name selezionare le caselle di controllo delle colonne della tabella da aggiungere all'indice univoco.
Scegliere OK.
Nella finestra di dialogo Nuovo indice fare clic su OK.
[Inizio pagina]
Utilizzo di Transact-SQL
Per creare un indice univoco per una tabella
In Esplora oggetti connettersi a un'istanza del Motore di database.
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 -- 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 ulteriori informazioni, vedere CREATE INDEX (Transact-SQL).
[Inizio pagina]