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

Come decidere quando utilizzare l'indice sulla colonna della tabella

In generale, la mia strategia di indicizzazione sarebbe qualcosa del genere (per ora sto usando esclusivamente SQL Server - adattalo al tuo sistema di database secondo necessità):

  • scegli un buono chiave di clustering - non un GUID, non un VARCHAR(250) o qualcosa del genere:un buono la chiave di clustering è stretta, unica, stabile, in continua crescita - qualcosa come un INT IDENTITY è perfetto. Rende questa la tua chiave primaria in cluster -> ti dà il tuo primo indice sulla tabella

  • per qualsiasi colonna utilizzata come chiave esterna in un'altra tabella, aggiungere un indice. Può essere un indice a colonna singola o un indice composto, qualunque cosa funzioni meglio per il tuo caso. È importante che la colonna della chiave esterna sia la prima colonna in quell'indice (se stai usando un indice composto) - in caso contrario, i vantaggi per il JOIN 's o per il controllo dell'integrità referenziale non sarà disponibile per il tuo sistema

E per ora è tutto.

Quindi:esegui il tuo sistema - osserva e misura - stabilisci una linea di base. L'app è abbastanza veloce? Se sì -> hai finito - vai a casa e goditi il ​​tuo tempo libero.

In caso contrario:inizia a raccogliere dati e indicazioni sul motivo per cui l'app non è abbastanza veloce. Guarda ad es. cose come i DMV in SQL Server che ti informano sulle query con le prestazioni peggiori o il DMV dell'indice mancante . Analizza quelli. Guarda cosa potresti migliorare. Aggiungi un indice alla volta e ancora:osserva, misura, confronta con la tua linea di base.

Se hai un miglioramento -> lascia quell'indice in posizione e questa misurazione è la tua nuova linea di base. Risciacqua e ripeti finché tu (e i tuoi utenti) non sarete soddisfatti delle prestazioni dell'app (e poi vai a casa e goditi il ​​tuo tempo libero).

La sovraindicizzazione in SQL Server può essere peggiore che non avere alcun indice. Non iniziare con troppi indici per cominciare! Stabilisci solo buono PK cluster e indici non cluster a chiave esterna - tutto qui - quindi osserva, misura, ottimizza e ripeti quel ciclo.



No