No, non indicizzi tutte le colonne. Indicizzi le colonne che sono specificamente coinvolte in un WHERE
clausola, e talvolta se sono coinvolti in un ORDER BY
.
In questo caso vorresti un indice su type
:
SELECT name FROM users WHERE type='admin'
In questo caso vorresti un indice su active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
In questo caso potresti volere un indice su active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Più indici aggiungi, più lente saranno le scritture, ma più veloci saranno le letture. Questo è un classico compromesso. Valuta attentamente quali indici ti servono e applicali solo se ci sarà un beneficio tangibile. Non limitarti a schiaffeggiarli perché ritieni che dovrebbero essere lì.
Su tabelle super minuscole, quelle con <1000 righe, gli indici non saranno di grande aiuto perché la scansione di una tabella non richiederà molto tempo. Su tutto ciò che non è banale sono assolutamente essenziali.
Se riscontri problemi di prestazioni, suggerirei che il tuo schema è l'ostacolo più grande, non la mancanza di indici.