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 unINT 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.