Em relação às questões de índices, um índice não é apenas desejável, mas é necessário para "acelerar" as coisas. Pelo que entendi (em termos "leigos"), a função de um índice é acelerar buscas e recuperações de dados dentro de uma tabela.
Motivos para usar índices:
- Identifique exclusivamente cada linha em cada tabela (a chave primária é um índice, afinal)
- Os índices são classificados (mesmo que os dados não sejam)
- Acelerar pesquisas e filtros:Um índice torna a recuperação dos dados mais rápida, pois "segura" a colocação dos dados na tabela (ele "indica" os dados que você deseja recuperar). Também torna mais fácil para o mecanismo de banco de dados filtrar os dados (é sempre mais rápido e simples filtrar classificado dados que embaralhados dados)
- Otimize a maneira como os dados são recuperados ao usar tabelas relacionadas:cada chave estrangeira deve ser indexada para acelerar as consultas que envolvem relações de chave primária - estrangeira
Algumas "regras de polegar" que uso para decidir quais campos precisam ser indexados:
- Toda chave primária é indexada (o óbvio one:uma chave primária deve ser única e não nula)
- Toda chave estrangeira deve ser indexada (para tornar as relações de chave primária - estrangeira eficientes)
- Todos os campos numéricos ou de data em que preciso realizar pesquisas devem ser indexados. Dito isso, tento evitar
double
(ou qualquer outro tipo numérico de ponto flutuante) a serem indexados, pois geralmente são usados para armazenar valores que não devem ser pesquisados. - Cada
char
ouvarchar
campo no qual preciso realizar pesquisas deve ser indexado. Tente evitar índices emtext
campos, pois eles podem conter valores muito grandes neles. - Evite indexação binária (
blob
) campos... não faz sentido - Não cair na tentação de indexar tudo. Tome seu tempo para decidir quais campos devem ser indexados e quais campos não devem ser indexado.