Creare indici non clusterCreate Nonclustered Indexes

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

È possibile creare indici non cluster in SQL Server 2017SQL Server 2017 utilizzando SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.You can create nonclustered indexes in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Un indice non cluster è una struttura di indice separata dai dati archiviati in una tabella che riordina una o più colonne selezionate.A nonclustered index is an index structure separate from the data stored in a table that reorders one or more selected columns. 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 databaseDatabase Engine alle righe nella tabella sottostante.Nonclustered indexes can often help you find data more quickly than searching the underlying table; queries can sometimes be answered entirely by the data in the nonclustered index, or the nonclustered index can point the Motore di databaseDatabase Engine to the rows in the underlying table. 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).Generally, nonclustered indexes are created to improve the performance of frequently used queries not covered by the clustered index or to locate rows in a table without a clustered index (called a heap). In una vista tabella o indicizzata è possibile creare più indici non cluster.You can create multiple nonclustered indexes on a table or indexed view.

Contenuto dell'argomentoIn This Topic

Prima di iniziareBefore You Begin

Modalità di implementazione tipicheTypical Implementations

Gli indici non cluster vengono implementati nei modi seguenti:Nonclustered indexes are implemented in the following ways:

  • Vincoli UNIQUEUNIQUE constraints

    Quando si crea un vincolo UNIQUE, viene creato un indice non cluster univoco per applicare un vincolo UNIQUE per impostazione predefinita.When you create a UNIQUE constraint, a unique nonclustered index is created to enforce a UNIQUE constraint by default. È possibile specificare un indice cluster univoco se nella tabella non ne esiste già uno.You can specify a unique clustered index if a clustered index on the table does not already exist. Per altre informazioni, vedere Unique Constraints and Check Constraints.For more information, see Unique Constraints and Check Constraints.

  • Indice indipendente da un vincoloIndex independent of a constraint

    Per impostazione predefinita, viene creato un indice non cluster se non è stato specificato l'indice cluster.By default, a nonclustered index is created if clustered is not specified. Il numero massimo di indici non cluster che è possibile creare per tabella è 999.The maximum number of nonclustered indexes that can be created per table is 999. Sono inclusi gli indici creati tramite i vincoli PRIMARY KEY o UNIQUE, ma non gli indici XML.This includes any indexes created by PRIMARY KEY or UNIQUE constraints, but does not include XML indexes.

  • Indice non cluster su una vista indicizzataNonclustered index on an indexed view

    Dopo la creazione di un indice cluster univoco su una vista, è possibile creare indici non cluster.After a unique clustered index has been created on a view, nonclustered indexes can be created. Per altre informazioni, vedere Creare viste indicizzate.For more information, see Create Indexed Views.

SicurezzaSecurity

AutorizzazioniPermissions

È richiesta l'autorizzazione ALTER per la tabella o la vista.Requires ALTER permission on the table or view. L'utente deve essere un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_ddladmin e db_owner .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Utilizzo di SQL Server Management StudioUsing SQL Server Management Studio

Per creare un indice non cluster tramite Progettazione tabelleTo create a nonclustered index by using the Table Designer

  1. In Esplora oggetti espandere il database contenente la tabella in cui si desidera creare un indice non cluster.In Object Explorer, expand the database that contains the table on which you want to create a nonclustered index.

  2. Espandere la cartella Tabelle .Expand the Tables folder.

  3. Fare clic con il pulsante destro del mouse sulla tabella in cui creare un indice non cluster e selezionare Progetta.Right-click the table on which you want to create a nonclustered index and select Design.

  4. Scegliere Indici/chiavi dal menu Progettazione tabelle.On the Table Designer menu, click Indexes/Keys.

  5. Nella finestra di dialogo Indici/chiavi fare clic su Aggiungi.In the Indexes/Keys dialog box, click Add.

  6. Selezionare il nuovo indice dalla casella di testo Chiave o indice primario/univoco selezionato .Select the new index in the Selected Primary/Unique Key or Index text box.

  7. Nella griglia selezionare Crea come CLUSTERED, quindi scegliere No dall'elenco a discesa a destra della proprietà.In the grid, select Create as Clustered, and choose No from the drop-down list to the right of the property.

  8. Scegliere Chiudi.Click Close.

  9. Nel menu File scegliere Salvatable_name.On the File menu, click Savetable_name.

Per creare un indice non cluster tramite Esplora oggettiTo create a nonclustered index by using Object Explorer

  1. In Esplora oggetti espandere il database contenente la tabella in cui si desidera creare un indice non cluster.In Object Explorer, expand the database that contains the table on which you want to create a nonclustered index.

  2. Espandere la cartella Tabelle .Expand the Tables folder.

  3. Espandere la tabella in cui si desidera creare un indice non cluster.Expand the table on which you want to create a nonclustered index.

  4. Fare clic con il pulsante destro del mouse sulla cartella Indici , scegliere Nuovo indicee selezionare Indice non cluster.Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. Nella pagina Generale della finestra di dialogo Nuovo indice immettere il nome del nuovo indice nella casella Nome indice .In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. In Colonne chiave indicefare clic su Aggiungi.Under Index key columns, click Add….

  7. Nella finestra di dialogo Seleziona colonne datable_name selezionare le caselle di controllo delle colonne di tabella da aggiungere all'indice non cluster.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the nonclustered index.

  8. Scegliere OK.Click OK.

  9. Nella finestra di dialogo Nuovo indice fare clic su OK.In the New Index dialog box, click OK.

Utilizzo di Transact-SQLUsing Transact-SQL

Per creare un indice non cluster in una tabellaTo create a nonclustered index on a table

  1. In Esplora oggetticonnettersi a un'istanza del Motore di databaseDatabase Engine.In Object Explorer, connect to an instance of Motore di databaseDatabase Engine.

  2. Sulla barra Standard fare clic su Nuova query.On the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    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  
    

    Per altre informazioni, vedere CREATE INDEX (Transact-SQL).For more information, see CREATE INDEX (Transact-SQL).