T-SQL - Indici

Indexessono tabelle di ricerca speciali che il motore di ricerca del database può utilizzare per accelerare il recupero dei dati. In poche parole, un fileindexè un puntatore ai dati in una tabella. Un indice in un database è molto simile a un indice alla fine di un libro.

Ad esempio, se si desidera fare riferimento a tutte le pagine di un libro che trattano un determinato argomento, fare prima riferimento all'indice, che elenca tutti gli argomenti in ordine alfabetico e quindi a uno o più numeri di pagina specifici.

Un indice aiuta ad accelerare le query SELECT e le clausole WHERE, ma rallenta l'input dei dati, con le istruzioni UPDATE e INSERT. Gli indici possono essere creati o eliminati senza alcun effetto sui dati.

La creazione di un indice implica l'istruzione CREATE INDEX, che consente di denominare l'indice, di specificare la tabella e la colonna o le colonne da indicizzare e di indicare se l'indice è in ordine crescente o decrescente.

Gli indici possono anche essere univoci, in modo simile al vincolo UNIQUE, in quanto l'indice impedisce voci duplicate nella colonna o combinazione di colonne su cui è presente un indice.

Comando CREATE INDEX

Di seguito è riportata la sintassi di base di CREATE INDEX.

Sintassi

CREATE INDEX index_name ON table_name

Indici a colonna singola

Un indice a colonna singola è quello creato in base a una sola colonna della tabella. Di seguito è riportata la sintassi di base.

Sintassi

CREATE INDEX index_name 
ON table_name (column_name)

Esempio

CREATE INDEX singlecolumnindex 
ON customers (ID)

Indici unici

Gli indici univoci vengono utilizzati non solo per le prestazioni, ma anche per l'integrità dei dati. Un indice univoco non consente l'inserimento di valori duplicati nella tabella. Di seguito è riportata la sintassi di base.

Sintassi

CREATE UNIQUE INDEX index_name 
on table_name (column_name)

Esempio

CREATE UNIQUE INDEX uniqueindex 
on customers (NAME)

Indici compositi

Un indice composto è un indice su due o più colonne di una tabella. Di seguito è riportata la sintassi di base.

Sintassi

CREATE INDEX index_name on table_name (column1, column2)

Esempio

CREATE INDEX compositeindex 
on customers (NAME, ID)

Indipendentemente dal fatto che si crei un indice a colonna singola o un indice composto, prendere in considerazione le colonne che è possibile utilizzare molto frequentemente nella clausola WHERE di una query come condizioni di filtro.

Se deve essere utilizzata una sola colonna, la scelta dovrebbe essere un indice a colonna singola. Dovrebbero esserci due o più colonne utilizzate di frequente nella clausola WHERE come filtri, l'indice composto sarebbe la scelta migliore.

Indici impliciti

Gli indici impliciti sono indici che vengono creati automaticamente dal server di database quando viene creato un oggetto. Gli indici vengono creati automaticamente per vincoli di chiave primaria e vincoli univoci.

Comando DROP INDEX

È possibile eliminare un indice utilizzando il comando MS SQL SERVER DROP. È necessario prestare attenzione quando si elimina un indice perché le prestazioni potrebbero essere rallentate o migliorate.

Sintassi

Di seguito è riportata la sintassi di base.

DROP INDEX tablename.index_name

Quando evitare gli indici?

Sebbene gli indici abbiano lo scopo di migliorare le prestazioni dei database, in alcuni casi dovrebbero essere evitati. Le seguenti linee guida indicano quando è necessario riconsiderare l'uso di un indice:

  • Gli indici non devono essere utilizzati su tavolini.

  • Le tabelle con aggiornamenti batch frequenti e di grandi dimensioni o operazioni di inserimento non devono essere indicizzate.

  • Gli indici non devono essere utilizzati su colonne che contengono un numero elevato di valori NULL.

  • Le colonne che vengono manipolate di frequente non devono essere indicizzate.