primary
e secondary
são ortogonais aos índices b-tree
e hash
, e ambos são ortogonais aos índices clustered
e non-clustered
.
-
A primeira classe de índices são índices lógicos. Eles são indicadores de alto nível sobre a estrutura de seus dados. A chave primária deve identificar exclusivamente seus dados, o que significa que deve ser uma das razões que a teoria do banco de dados chama de "chave candidata". Os índices secundários são para acelerar consultas em outros campos que não o índice principal e não precisam ser chaves candidatas.
-
A segunda classe são implementações de índices específicas, adequadas para consultas ligeiramente diferentes.
b-tree
pode atender consultas de intervalo (WHERE c > 3 AND c < 7
) quehash
não podem.hash
é, no entanto, O (1) (tempo constante) no caso médio em consultas exatas (WHERE c = 5
), enquantob-tree
é O (lg n) (tempo logarítmico) sempre.b-tree
ehash
são ambas as estruturas de dados bem definidas, mas elas têm muito pouco a ver com seus dados reais. -
A terceira classe define se a tabela inteira é classificada no disco pela ordem de classificação do índice. Se esse for o caso, ele é chamado de
clustered
index.
Como você pode ver, um índice pode ser um primary clustered b-tree
ou um primary clustered hash
ou alguma outra combinação extraída dessas três classes diferentes.
Se lhe perguntassem quais índices introduzir, a resposta seria principalmente da primeira classe. A questão é provavelmente sobre o esquema. Esse é o seu ponto de partida, pelo menos. Somente quando você tiver decidido quais índices apresentar, é necessário pensar se eles devem ser b-trees, cluster etc. A primeira classe é lógica, strongmente associada a como você está usando os dados. Os outros são detalhes de implementação.