Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:quando utilizzare l'indice cluster e non cluster?

Voglio solo mettere una parola di avvertimento:per favore con molta attenzione scegli il tuo indice cluster! Ogni tabella di dati "normale" dovrebbe avere un indice cluster, dal momento che avere un indice cluster velocizza molte operazioni - sì, accelerare , anche inserisce ed elimina! Ma solo se scegli un buono indice cluster.

È il più replicato struttura dei dati nel database di SQL Server. La chiave di clustering farà anche parte di ogni singolo indice non cluster sulla tabella.

Dovresti prestare la massima attenzione quando scegli una chiave di clustering:dovrebbe essere:

  • stretto (ideale 4 byte)

  • unico (dopotutto è il "puntatore di riga". Se non lo rendi univoco, SQL Server lo farà per te in background, costandoti un paio di byte per ogni voce moltiplicata per il numero di righe e il numero di indici non cluster che avere - questo può essere molto costoso!)

  • statico (non cambiare mai - se possibile)

  • idealmente in continuo aumento quindi non ti ritroverai con un'orribile frammentazione dell'indice (un GUID è l'opposto totale di una buona chiave di clustering, per quel particolare motivo)

  • dovrebbe essere non annullabile e idealmente anche a larghezza fissa - a varchar(250) rende una chiave di clustering molto scarsa

Qualsiasi altra cosa dovrebbe davvero essere di secondo e terzo livello di importanza dietro questi punti ....

Guarda alcuni dei libri di Kimberly Tripp (The Queen of Indexing ) post sul blog sull'argomento - tutto ciò che ha scritto nel suo blog è assolutamente inestimabile - leggilo, digeriscilo - vivilo!