Não, você não indexa todas as colunas. Você indexa colunas que estão especificamente envolvidas em um
WHERE
cláusula e, às vezes, se estiverem envolvidos em um ORDER BY
. Nesse caso, você deseja um índice em
type
:SELECT name FROM users WHERE type='admin'
Nesse caso, você deseja um índice em
active,type
:SELECT name FROM users WHERE type='admin' AND active=1
Neste caso, você pode querer um índice em
active,type,name
:SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Quanto mais índices você adicionar, mais lentas serão as gravações, mas as leituras serão mais rápidas. Esta é uma troca clássica. Avalie cuidadosamente quais índices você precisa e aplique-os somente se houver um benefício tangível. Não apenas dê um tapa neles porque você sente que eles deveriam estar lá.
Em tabelas super pequenas, aquelas com <1000 linhas, os índices não ajudarão muito porque uma verificação de tabela não demorará muito. Em qualquer coisa não trivial eles são absolutamente essenciais.
Se você está tendo problemas de desempenho, sugiro que seu esquema seja o maior obstáculo, não a falta de índices.