Creare indici non cluster
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure
È possibile creare gli indici non cluster in SQL Server usando SQL Server Management Studio o Transact-SQL. Un indice non cluster è una struttura di indice separata dai dati archiviati in una tabella che riordina una o più colonne selezionate. Spesso gli indici non cluster consentono di trovare i dati più rapidamente rispetto alla ricerca nella tabella sottostante. Le query talvolta possono ottenere risposta unicamente mediante i dati presenti nell'indice non cluster oppure l'indice non cluster può puntare il motore di database alle righe nella tabella sottostante. Gli indici non cluster vengono creati generalmente per migliorare le prestazioni delle query di utilizzo frequente non coperte dall'indice cluster oppure per individuare le righe in una tabella senza un indice cluster (denominato heap). In una vista tabella o indicizzata è possibile creare più indici non cluster.
Operazioni preliminari
Modalità di implementazione tipiche
Gli indici non cluster vengono implementati nei modi seguenti:
Vincoli UNIQUE
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 altre informazioni, vedere Unique Constraints and Check Constraints.
Indice indipendente da un vincolo
Per impostazione predefinita, viene creato un indice non cluster se non è stato specificato l'indice cluster. Il numero massimo di indici non cluster che è possibile creare per tabella è 999. Sono inclusi gli indici creati tramite i vincoli PRIMARY KEY o UNIQUE, ma non gli indici XML.
Indice non cluster su una vista indicizzata
Dopo la creazione di un indice cluster univoco su una vista, è possibile creare indici non cluster. Per altre informazioni, vedere Creare viste indicizzate.
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 non cluster tramite Progettazione tabelle
In Esplora oggetti espandere il database contenente la tabella in cui si desidera creare un indice non cluster.
Espandere la cartella Tabelle .
Fare clic con il pulsante destro del mouse sulla tabella in cui creare un indice non cluster e selezionare Progetta.
Fare clic con il pulsante destro del mouse sulla colonna in cui si vuole creare l'indice non cluster e selezionare Indici/chiavi.
Nella finestra di dialogo Indici/chiavi selezionare Aggiungi.
Selezionare il nuovo indice dalla casella di testo Chiave o indice primario/univoco selezionato .
Nella griglia selezionare Crea come clustered, quindi scegliere No dall'elenco a discesa a destra della proprietà.
Selezionare Chiudi.
Nel menu File scegliere Salva nome_tabella.
Per creare un indice non cluster tramite Esplora oggetti
In Esplora oggetti espandere il database contenente la tabella in cui si desidera creare un indice non cluster.
Espandere la cartella Tabelle .
Espandere la tabella in cui si desidera creare un indice non cluster.
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 .
In Colonne chiave indice fare clic su Aggiungi.
Nella finestra di dialogo Seleziona colonne da nome_tabella selezionare le caselle di controllo delle colonne di tabella da aggiungere all'indice non cluster.
Seleziona OK.
Nella finestra di dialogo Nuovo indice fare clic su OK.
Utilizzo di Transact-SQL
Per creare un indice non cluster in una tabella tramite Transact-SQL
In Esplora oggetti connettersi a un'istanza del motore di database con
AdventureWorks2022
installato. È possibile scaricareAdventureWorks2022
dai database di esempio.Sulla barra Standard selezionare Nuova query.
Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui.
USE AdventureWorks2022; GO -- Find an existing index named IX_ProductVendor_VendorID and delete it if found. IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_ProductVendor_VendorID') DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor; GO -- Create a nonclustered index called IX_ProductVendor_VendorID -- on the Purchasing.ProductVendor table using the BusinessEntityID column. CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (BusinessEntityID); GO