I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Un indice consente a SQL Server di recuperare rapidamente i dati dalle righe. Gli indici funzionano come il sommario all'inizio dei libri, permettendoti di cercare rapidamente la pagina in cui si trova un argomento. Senza indici, SQL Server deve eseguire la scansione di tutte le righe in una tabella per trovare un record.

Esistono due tipi di indici in SQL Server: cluster e non cluster. Scopri la differenza tra indici cluster e non cluster e perché sono importanti.

Indice cluster in SQL Server

In un indice cluster, le righe di dati vengono archiviate fisicamente in modo ordinato in base al valore della chiave. Poiché l'indice include la tabella e può disporre le righe solo in un ordine, è possibile creare un solo indice cluster per tabella.

Mentre gli indici rendono più veloce il recupero delle righe in un intervallo,

instagram viewer
Istruzioni INSERT e UPDATE potrebbe essere lento perché Query Optimizer esegue la scansione dell'indice in ordine finché non trova l'indice di destinazione.

Indice non cluster in SQL Server

Un indice non cluster contiene i valori chiave la cui voce è un puntatore chiamato localizzatore di riga. Per le tabelle cluster (tabelle con un indice cluster), il puntatore punta a una chiave nell'indice cluster che a sua volta punta alla riga nella tabella. Per le righe senza un indice cluster, il puntatore punta direttamente alla riga della tabella.

Come creare un indice cluster in SQL Server

Quando crei una tabella con una chiave primaria, SQL Server crea automaticamente una chiave di indice cluster basata su tale chiave primaria. Se non disponi di una chiave primaria, puoi eseguire la seguente istruzione per creare una chiave di indice cluster.

CREARE GRUPPO INDICE <indicenome>
SUL TAVOLO <nome_tabella>(nome_colonna)

In questa istruzione si specifica il nome dell'indice, il nome della tabella in cui crearlo e il nome della colonna da utilizzare nell'indice.

Se aggiungi una chiave primaria a una tabella che ha già un indice cluster, SQL Server creerà un indice non cluster con essa.

Per creare un indice cluster che non includa la colonna della chiave primaria, devi prima eliminare il vincolo della chiave primaria.

UTILIZZOnome del database
ALTERTAVOLO nome_tabella
GOCCIOLARECOSTRIZIONE pk_name
ANDARE

La rimozione dei vincoli di chiave primaria rimuove anche l'indice cluster consentendo di crearne uno personalizzato.

Come creare un indice non cluster in SQL Server

Per creare un indice non cluster, utilizzare la seguente istruzione.

CREAREINDICE <indicenome>
SUL TAVOLO <nome_tabella>(nome_colonna)

Puoi anche utilizzare la parola chiave NONCLUSTERED in questo modo:

CREARE [NON INCLUSO] INDICE <indicenome>
SUL TAVOLO <nome_tabella>(nome_colonna)

Questa istruzione crea un indice non cluster nella tabella specificata e include la colonna indicata.

Se lo desideri, puoi ordinare le colonne in ordine crescente (ASC) o decrescente (DESC).

CREARE [NON INCLUSO] INDICE <indicenome>
SUL TAVOLO <nome_tabella>(nome_colonna ASC/DESC)

Quale indice dovresti scegliere?

Sia gli indici cluster che quelli non cluster migliorano i tempi di query. Se la maggior parte delle query sono operazioni SELECT su più colonne della tabella, gli indici cluster sono più veloci. Tuttavia, per le operazioni INSERT o UPDATE, gli indici non cluster sono più veloci poiché Query Optimizer può individuare la colonna direttamente dall'indice.

Come puoi vedere, questi indici funzionano meglio per diverse query SQL. La maggior parte dei database SQL trarrà quindi vantaggio dall'avere almeno un indice cluster e indici non cluster per le colonne che vengono aggiornate regolarmente.

L'importanza degli indici in SQL Server

Gli indici cluster e non cluster portano a prestazioni di query più elevate. Quando si esegue una query, Query Optimizer esegue la scansione dell'indice per la posizione di archiviazione di una riga, quindi recupera le informazioni da tale posizione. Questo è molto più veloce della scansione di tutte le righe della tabella.

È inoltre possibile utilizzare indici non in cluster per risolvere i deadlock di ricerca dei segnalibri creando un indice non in cluster per le colonne a cui le query interessate accedono.