Quero acrescentar aqui que bancos de dados diferentes exigem estratégias diferentes. Vamos comparar o MySQL com o InnoDB e o PostgreSQL, por exemplo.
InnoDB
As tabelas do InnoDB são basicamente um índice de árvore b da chave primária, que são estendidas para incluir as informações da linha na entrada do índice. As varreduras de ordem física não são suportadas e todas as varreduras ocorrem em ordem lógica. Isso significa duas coisas:
Uma varredura seqüencial no Innodb gera muitas E / S de disco aleatórias e
O índice da chave primária deve ser percorrido, independentemente de alguém estar usando um índice secundário.
As pesquisas de chave primária são mais rápidas neste modelo do que em qualquer outra abordagem.
Nesse caso, é muito importante indexar campos suficientes em tabelas de várias páginas. A regra típica é indexar tudo o que você deseja filtrar.
PostgreSQL
O PostgreSQL usa arquivos de heap, uma tabela por arquivo (algumas tabelas podem ter muitos arquivos) onde as tuplas são alocadas a partir do espaço livre desse heap. Varreduras de ordem física são suportadas. Para que uma varredura de ordem lógica funcione, é necessário adicionar um índice.
As chaves primárias no PostgreSQL são basicamente um subconjunto de índices exclusivos, onde nenhum valor pode ser NULL. Restrições UNIQUE são feitas usando índices implícitos e vários outros tipos de índice são suportados com operações diferentes possíveis no índice.
Isso significa:
As pesquisas de chave primária, assumindo que uma tabela razoavelmente grande exija um arquivo de índice e um arquivo de tabela. Isso é significativamente mais lento que a abordagem do MySQL, onde o índice só deve ser percorrido e a linha está contida no índice.
As verificações de ordem física têm um desempenho muito melhor, reduzindo a E / S aleatória do disco, onde um número significativo de linhas deve ser processado.
Varreduras de índices secundários têm melhor desempenho do que o MySQL porque apenas um índice deve ser percorrido para chegar à parte física da tabela.
Nesse modelo, os índices geralmente são necessários, mas o planejador tem mais liberdade quando usar um índice, e as implicações de não usá-lo são geralmente menos graves. As tabelas são geralmente otimizadas (em vez de se especializarem em pesquisas pkey) e, portanto, são necessários menos índices.
TL; DR
Conheça o seu RDBMS.