Creare un indice univoco
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL in Microsoft Fabric
In questo argomento viene illustrato come creare un indice univoco in una tabella di SQL Server usando 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 Unique Constraints and Check Constraints.
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 (tramite 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'articolo
Prima di iniziare:
Per creare un indice univoco per una tabella utilizzando:
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, FirstNamee 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 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.
Per ulteriori informazioni, vedere Unique Constraints and Check Constraints e Primary and Foreign Key Constraints.
Indice indipendente da un vincolo
In una tabella è possibile definire più indici non cluster.
Per altre 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 altre informazioni, vedere Creare 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 altre 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 .
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 Chiave o indice primario/univoco selezionato .
In (Generale)nella griglia principale selezionare Tipo , quindi scegliere Indice dall'elenco.
Selezionare Colonne e quindi fare clic sul pulsante con i puntini di sospensione (...).
In Nome colonna della finestra di dialogo Colonne indiceselezionare 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 tabellenella 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.
Fare clic su Close.
Nel menu File fare clic su Salva nome_tabella.
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 indicee 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 indicefare clic su Aggiungi.
Nella finestra di dialogo Seleziona colonne da nome_tabella selezionare le caselle di controllo delle colonne della tabella da aggiungere all'indice univoco.
Fare clic su OK.
Nella finestra di dialogo Nuovo indice fare clic su OK.
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 AdventureWorks2022; GO -- Find an existing index named AK_UnitMeasure_Name -- on the Production.UnitMeasure table and delete it if found. IF EXISTS (SELECT name from sys.indexes WHERE name = N'AK_UnitMeasure_Name' AND object_id = OBJECT_ID(N'Production.UnitMeasure', N'U')) 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 altre informazioni, vedere CREATE INDEX (Transact-SQL).