Per quanto riguarda le domande sugli indici, un indice non è solo auspicabile, ma è necessario per "accelerare" le cose. A quanto ho capito (in termini "professionisti"), la funzione di un indice è velocizzare le ricerche e i recuperi di dati all'interno di una tabella.
Motivi per utilizzare gli indici:
- Identifica in modo univoco ogni riga di ogni tabella (la chiave primaria è un indice, dopotutto)
- Gli indici sono ordinati (anche se i dati non lo sono)
- Velocizza ricerche e filtri:un indice rende più veloce il recupero dei dati, poiché "mantiene" il posizionamento dei dati nella tabella (rileva i dati che vuoi recuperare). Inoltre rende più facile al motore di database filtrare i dati (è sempre più veloce e semplice filtrare ordinati dati che criptati dati)
- Ottimizza il modo in cui i dati vengono recuperati quando si utilizzano tabelle correlate:ogni chiave esterna deve essere indicizzata per velocizzare le query che coinvolgono le relazioni primaria - chiave esterna
Alcune "regole del pollice" che utilizzo per decidere quali campi devono essere indicizzati:
- Ogni chiave primaria è indicizzata (l'ovvio uno:una chiave primaria deve essere univoca e non nulla)
- Ogni chiave esterna deve essere indicizzata (per rendere efficienti le relazioni primaria - chiave esterna)
- Ogni campo numerico o data su cui devo eseguire ricerche deve essere indicizzato. Detto questo, cerco di evitare il
double
(o qualsiasi altro tipo numerico a virgola mobile) da indicizzare, poiché sono generalmente utilizzati per memorizzare valori non destinati a essere ricercati. - Ogni
char
ovarchar
il campo su cui devo eseguire le ricerche deve essere indicizzato. Cerca di evitare gli indici sutext
campi, poiché possono contenere valori molto grandi al loro interno. - Evita binario di indicizzazione (
blob
) campi... non ha senso - Non cadi nella tentazione di indicizzare tutto. Prenditi il tuo tempo per decidere quali campi devono essere indicizzato e quali campi non devono essere indicizzato.