Non, vous n'indexez pas toutes les colonnes. Vous indexez des colonnes spécifiquement impliquées dans un WHERE
clause, et parfois s'ils sont impliqués dans un ORDER BY
.
Dans ce cas, vous voudriez un index sur type
:
SELECT name FROM users WHERE type='admin'
Dans ce cas, vous voudriez un index sur active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
Dans ce cas, vous voudrez peut-être un index sur active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Plus vous ajoutez d'index, plus les écritures seront lentes mais plus les lectures seront rapides. Il s'agit d'un compromis classique. Évaluez soigneusement les index dont vous avez besoin et appliquez-les uniquement s'il y a un avantage tangible. Ne vous contentez pas de les gifler parce que vous pensez qu'ils devraient être là.
Sur les tables super minuscules, celles avec <1000 lignes, les index n'aideront pas beaucoup car une analyse de table ne prendra pas autant de temps. Sur tout ce qui n'est pas trivial, ils sont absolument essentiels.
Si vous rencontrez des problèmes de performances, je dirais que votre schéma est le plus gros obstacle, pas le manque d'index.