Índices

Indices são utilizados para organizar informações de uma ou mais colunas, normalmente em uma árvore binária, para otimizar o processo de pesquisa por informações dessa(s) coluna(s). Alguns casos onde essa abordagem deve sempre ser utilizada:
  • Chaves estrangeiras;
  • Atributos acessados por filtros (podem ainda ser utilizados índices compostos);
  • Atributos utilizados em group by e order by.
Deve-se também tomar cuidados ao criar muitos índices, pois isso pode causar um processamento muito grande ao inserir um item em uma tabela utilizada por muitos índices. Além disso, pode ocorrer dos índices se fragmentarem, perdendo parte do seu aceleramento nas pesquisas (isso pode ser consertado com um rebuild do índice).
Em alguns casos simplesmente não vale a pena criar índices:
  • Atributos de tipos muito grandes, como text, image, decimais, ...;
  • Atributos calculados;
  • Atributos com alta cardinalidade, como sexo, que, considerando apenas masculino e feminino, não ajudaria em nada ter um índice com apenas 'M' e 'F'.

Em SQL Server

Índice Clustered

É o índice que determina qual será a ordenação dos dados da tabela. Por esse motivo existe apenas um por tabela. Os nós da estrutura são armazenados em um local separado, porém as folhas da árvore são os próprios registros.
No índice clustered a referência é o dado
No índice clustered a referência é o dado

Índice Non-clustered

São os índices comuns. Toda sua estrutura de nós e folhas é armazenada separadamente da tabela. As folhas, nesse caso, fazem referência para os registros na tabela.
No índice non-clustered a referência é para o dado
No índice non-clustered a referência é para o dado