Segue algumas das diferenças entre os dois tipos de index do SqlServer:
O tipo de index Clustered realiza a ordenação dos dados com os valores da coluna que foi selecionada para fazer parte do index, ou seja, a ordem é realizada com os próprios dados da coluna pertencente ao index. Dessa forma as informações são gravadas na tabela física na mesma ordem do index facilitando bastante a localização de registros na tabela.
Por ordenar fisicamente os dados na tabela de acordo como o valor da coluna do index, para cada tabela podemos ter apenas um index Clustered.
Apesar de melhorar o desempenho na localização de um registro, temos um tempo extra gasto com inclusões ou exclusões de dados, isso acontece pois caso seja incluído ou excluído um registro pode ser que a ordem seja alterada e que ocorra um reposicionamento dos dados.
Em uma tabela pode existir index Clustered e Nonclustered, mas devemos lembrar de sempre criar primeiramente o index Clustered já que com sua criação todos os dados serão reposicionados na tabela para assumir a ordem da coluna que ira compor o index.
O tipo de index Nonclustered funciona de maneira diferente do Clustered, ou seja, no momento da criação do index as informações físicas da tabela não são reposicionadas, ficando assim o armazenamento de ordem aleatória.
É indicado o uso de index Nonclustered quando há necessidade de localizar dados que possuem diferentes tipos de critérios, ou seja, é indicado quando na localização de registros o filtro realizada utiliza diferentes campos podendo ter um ou mais index Nonclustered para cada critério selecionado no filtro da query.
Obrigado
2 comentários:
No caso do BI, onde há grande quantidade de leitura e escrita no momento do ETL(que é no momento da carga). Seria interessante ter clustered nas PK e nonclustered nos campos em dimensões e nonclustered nas fatos?
Rafael, tudo depende de como esta o seu processo, no meu caso tenho uma área Stage onde gravo informações sem nenhuma transformação (Extract), após isso tenho uma area de enriquecimento (trasnformation e Load) onde utilizo Clustered.
Após isso tenho toda a transferencia para o meu DW onde não utilizo desse recurso (clustered) por se tratar de um database colunar
Obrigado
Postar um comentário