
Eu tenho um banco de dados back-end do SQL Server. Entendo que os índices clusterizados são mais eficientes, mas ordenam fisicamente as páginas para torná-los eficientes. Portanto, se for um campo inserido pelo usuário, toda vez que um novo registro for adicionado toda a tabela precisará se reestruturar.
Isso não pode ser eficiente. Então, colocar um índice regular em um campo é eficiente neste caso? ou você simplesmente o deixaria sem indexação?
Responder1
Como regra geral, você só deve usar índices clusterizados para campos de identidade, e os números automáticos são os melhores, pois estão sempre aumentando. Atualizar uma coluna de identidade é algo que você deve fazer uma vez a cada milênio, e certamente não no tempo de execução do aplicativo, portanto, você nunca deve ter que reordenar o conteúdo da página por meio de uma instrução DML padrão.
Dentro dessas restrições, os índices clusterizados são muito eficientes, mas, como você apontou, se usados incorretamente, eles podem ser um grande obstáculo ao desempenho das instruções DML no campo indexado.
Resposta curta: não use índices clusterizados para campos inseridos pelo usuário.
Quanto aos índices não clusterizados, eles podem ser uma grande vantagem ou uma advertência, dependendo de seu uso. NCIs são muito bons na recuperação de um ou um pequeno número de linhas, mas o tamanho do índice aumenta com cada campo adicionado a ele, portanto, índices complicados de muitos campos ou índices que só poderiam resolver uma consulta para um grande número de linhas em pelo menos não proporcionam os ganhos e muitas vezes são mais chatos do que valem.