Condividi tramite


Creare indici con colonne incluse

Questo argomento descrive come aggiungere colonne incluse (o non chiave) per estendere la funzionalità degli indici non cluster in SQL Server 2014 usando SQL Server Management Studio o Transact-SQL. Con l'inclusione di colonne non chiave è possibile creare indici non cluster in grado di coprire più query. Ciò è possibile perché le colonne non chiave presentano i vantaggi seguenti:

  • Possono essere tipi di dati che non sono consentiti come colonne chiave indice.

  • Non vengono considerati dal motore di database quando si calcola il numero di colonne chiave di indice o le dimensioni della chiave di indice.

Con un indice con colonne non chiave è possibile aumentare significativamente le prestazioni delle query quando tutte le relative colonne sono incluse nell'indice come colonne chiave o non chiave. Si ottengono miglioramenti delle prestazioni perché Query Optimizer può individuare tutti i valori di colonna all'interno dell'indice; non è possibile accedere ai dati dell'indice cluster o tabella, con un minor numero di operazioni di I/O su disco.

Annotazioni

Quando in un indice sono contenute tutte le colonne a cui fa riferimento una query, viene generalmente indicato come copertura della query.

Contenuto dell'articolo

Prima di iniziare

Indicazioni sulla progettazione

  • Riprogettare gli indici non cluster con una grande dimensione della chiave dell'indice in modo che solo le colonne usate per la ricerca e le consultazioni siano colonne chiave. Trasforma tutte le altre colonne che coprono la query in colonne non chiave. In questo modo, avrai tutte le colonne necessarie per coprire la query, ma la chiave di indice stessa è piccola ed efficiente.

  • Includere colonne non chiave in un indice non cluster per evitare di superare le limitazioni correnti delle dimensioni dell'indice di un massimo di 16 colonne chiave e una dimensione massima della chiave di indice di 900 byte. Il motore di database non considera le colonne non chiave durante il calcolo del numero di colonne chiave di indice o delle dimensioni della chiave di indice.

Limitazioni e restrizioni

  • Le colonne non chiave possono essere definite solo negli indici non cluster.

  • Tutti i tipi di dati ad eccezione textdi , ntexte image possono essere usati come colonne non chiave.

  • Le colonne calcolate deterministiche, precise o imprecise, possono essere colonne non chiave. Per altre informazioni, vedere Indici per le colonne calcolate.

  • Le colonne calcolate derivate dai imagetipi di dati , ntexte text possono essere colonne non chiave, purché il tipo di dati della colonna calcolata sia consentito come colonna di indice non chiave.

  • Le colonne non chiave non possono essere eliminate da una tabella a meno che l'indice della tabella non venga eliminato per primo.

  • Non è possibile modificare le colonne non chiave, ad eccezione di quanto segue:

    • Modifica la nullabilità della colonna da NOT NULL a NULL.

    • Aumentare la lunghezza delle colonne varchar, nvarchar o varbinary.

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 con colonne non chiave

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella in cui si desidera creare un indice con colonne non chiave.

  2. Fare clic sul segno più per espandere la cartella Tabelle .

  3. Fare clic sul segno più per espandere la tabella in cui si desidera creare un indice con colonne non chiave.

  4. Fare clic con il pulsante destro del mouse sulla cartella Indici, scegliere Nuovo indicee selezionare Indice non cluster.

  5. Nella pagina Generale della finestra di dialogo Nuovo indice immettere il nome del nuovo indice nella casella Nome indice .

  6. Nella scheda Colonne chiave indice fare clic su Aggiungi....

  7. Nella finestra di dialogo Seleziona colonne danome_tabella, seleziona la casella di controllo o le caselle di controllo delle colonne della tabella da aggiungere all'indice.

  8. Fare clic su OK.

  9. Nella scheda Colonne incluse fare clic su Aggiungi....

  10. Nella finestra di dialogo Seleziona colonne datable_name, seleziona la casella di controllo o le caselle di controllo delle colonne della tabella per essere aggiunte all'indice come colonne non chiave.

  11. Fare clic su OK.

  12. Nella finestra di dialogo Nuovo indice fare clic su OK.

Uso di Transact-SQL

Per creare un indice con colonne non chiave

  1. In Esplora oggetti, collegarsi a un'istanza di Database Engine.

  2. Sulla barra Standard fare clic su Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.

    USE AdventureWorks2012;  
    GO  
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.   
    -- index key column is PostalCode and the nonkey columns are  
    -- AddressLine1, AddressLine2, City, and StateProvinceID.  
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
    ON Person.Address (PostalCode)  
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  
    GO  
    

Per altre informazioni, vedere CREATE INDEX (Transact-SQL).