No, no indexas todas las columnas. Indexas columnas que están específicamente involucradas en un WHERE
y, a veces, si están involucrados en un ORDER BY
.
En este caso, querrá un índice en type
:
SELECT name FROM users WHERE type='admin'
En este caso, querrá un índice en active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
En este caso, es posible que desee un índice en active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Cuantos más índices agregue, más lentas serán las escrituras, pero más rápidas serán las lecturas. Esta es una compensación clásica. Evalúe cuidadosamente qué índices necesita y aplíquelos solo si habrá un beneficio tangible. No te los pongas simplemente porque sientes que deberían estar ahí.
En tablas súper pequeñas, aquellas con <1000 filas, los índices no ayudarán mucho porque un escaneo de tabla no tomará tanto tiempo. En cualquier cosa que no sea trivial, son absolutamente esenciales.
Si tiene problemas de rendimiento, le sugiero que su esquema sea el mayor obstáculo, no la falta de índices.