Pergunta

Quais são as diferenças entre um clustered e uma non-clustered index?

Foi útil?

Solução

índice de cluster

  • Apenas um por tabela
  • Mais rápido de ler do que não agrupadas conforme os dados são armazenados fisicamente na ordem do índice

Índice de Non Cluster

  • Pode ser usado muitas vezes por tabela
  • Mais rápido para operações de inserção e atualização que um índice de cluster

Ambos os tipos de índice vai melhorar o desempenho ao selecionar dados com campos que utilizam o índice, mas vai abrandar atualização e inserção operações.

Devido à inserção mais lenta e de actualização agrupado índices deve ser ajustado em um campo que é normalmente incremental, isto Id ou timestamp.

SQL Server irá normalmente usar apenas um índice se a sua selectividade é superior a 95%.

Outras dicas

índices agrupados encomendar fisicamente os dados no disco. Isto significa que os dados não extra é necessário para o índice, mas só pode haver um índice de cluster (obviamente). Acessando dados usando um índice agrupado é mais rápido.

Todos os demais índices devem ser não-agrupado. Um índice não agrupado tem um duplicado dos dados das colunas indexadas mantidos ordenados em conjunto com apontadores para as linhas de dados reais (ponteiros para o índice agrupado se houver). Isto significa que o acesso a dados através de um índice não agrupado tem de passar através de uma camada extra de engano. No entanto, se você selecionar apenas os dados que está disponível nas colunas indexadas você pode obter os dados de volta diretamente a partir dos dados de índice duplicados (que é porque é uma boa idéia para selecionar apenas as colunas que você precisa e não usar *)

índices agrupados são armazenados fisicamente na mesa. Isso significa que eles são os mais rápidos e você só pode ter um índice agrupado por tabela.

índices não agrupados são armazenados separadamente, e você pode ter como muitos como você deseja.

A melhor opção é definir o índice agrupado na coluna exclusiva mais utilizado, geralmente o PK. Você deve sempre ter um índice agrupado bem selecionados em suas tabelas, a menos que um motivo muito forte - não consigo pensar em uma única, mas hey, pode ser lá fora -. Para não fazê-lo surge

Clustered Index

  1. Não pode ser apenas um índice agrupado para uma tabela.
  2. Normalmente, feito na chave primária.
  3. Os nós de folha de um índice agrupado conter as páginas de dados.

Non-Clustered Index

  1. Não pode haver apenas 249 índices não-agrupado para uma tabela (até versão do SQL 2005 versões posteriores suportam até 999 índices não clusterizados).
  2. Normalmente, feito na qualquer tecla.
  3. O nó folha de um índice sem cluster não consiste em páginas de dados. Em vez disso, os nós de folha contêm linhas do índice.

Clustered Index

  • Apenas um índice agrupado pode estar lá em uma tabela
  • Classificar os registros e armazená-los fisicamente de acordo com a ordem
  • A recuperação de dados é mais rápido do que os índices não agrupados
  • Não precisa de espaço extra para armazenar estrutura lógica

Índice de Non Cluster

  • Não pode haver qualquer número de índices não agrupados em uma tabela
  • não afetam a ordem física. Criar uma ordem lógica para linhas de dados e indicadores de uso para arquivos de dados físicos
  • inserção de dados / update é mais rápido do que índice de cluster
  • Use o espaço extra para armazenar estrutura lógica

Para além destas diferenças que você tem que saber que quando a tabela é não agrupado (quando a tabela não tiver um índice agrupado) arquivos de dados não são ordenadas e utiliza estrutura de dados Heap como a estrutura de dados.

agrupadas basicamente significa que os dados estão em ordem phisical na tabela. É por isso que você pode ter apenas um por tabela.

meios unclustered que é "apenas" uma ordem lógica.

Pros:

índices Agrupamentos grande trabalho para gamas (por exemplo, seleccionar a partir de * my_table onde my_key entre @Min e @max)

Em algumas condições, o DBMS não terá que fazer um trabalho de tipo se você usar uma instrução orderby.

Contras:

índices agrupados são pode desacelerar inserções porque os layouts físicas dos registros têm de ser modificados conforme registros são colocados em se as novas chaves não estão em ordem sequencial.

índice

A agrupado realmente descreve a ordem em que os registros são armazenados fisicamente no disco, daí a razão que você pode ter apenas um.

Um índice não agrupado define uma ordem lógica que não corresponde à ordem física no disco.

Um agrupado índice é essencialmente uma cópia classificada dos dados nas colunas indexadas.

A principal vantagem de um índice agrupado é que quando sua consulta (buscar) localiza os dados no índice, em seguida, IO nenhum adicional é necessário para recuperar os dados.

A sobrecarga de manter um índice de cluster, especialmente de uma tabela actualizada frequentemente, pode levar a um mau desempenho e, por esse motivo, pode ser preferível para criar um índice não agrupado.

Uma base de dados indexada tem duas partes: um conjunto de registos físicos, que são arranjados em alguma ordem arbitrária, e um conjunto de índices que identificam a sequcia em que os registos deve ser lida para se obter um resultado classificados por algum critério. Se não existe uma correlação entre a disposição física e do índice, em seguida, ler todos os registros em ordem pode exigir fazendo lotes de único registro independente operações de leitura. Porque um banco de dados pode ser capaz de ler dezenas de recordes consecutivos em menos tempo do que levaria para ler dois registros não-consecutivos, o desempenho pode ser melhorado se os registros que são consecutiva no índice também são armazenadas consecutivamente no disco. Especificando que um índice está em cluster fará com que o banco de dados para fazer algum esforço (bancos de dados diferentes diferem a respeito de quanto) para organizar as coisas de modo que os grupos de registros que são consecutiva no índice será consecutiva no disco.

Por exemplo, se alguém fosse começar com uma base de dados que não sejam agrupados vazio e adicionar 10.000 registos em sequência aleatória, os registos provavelmente ser adicionadas no final na ordem em que foram adicionados. Leitura do banco de dados, a fim pelo índice exigiria 10.000 de um registro lê. Se fosse para usar um banco de dados em cluster, no entanto, o sistema pode verificar quando a adição de cada registro se o recorde anterior foi armazenado por si só; se ele descobriu que ser o caso, pode escrever esse registro com o novo no final do banco de dados. Ele poderia, então, olhar para o registro físico antes de os slots onde os registros movidos usados ??para residir e ver se o registro que se seguiu que foi armazenado por si só. Se se verificar que, para ser o caso, ele poderia mover esse registro a esse ponto. Usando este tipo de abordagem poderia causar muitos registros sejam agrupados em pares, portanto, potencialmente quase dobrando a velocidade de leitura sequencial.

Na realidade, bases de dados em cluster utilizar algoritmos mais sofisticados do que isso. A principal coisa a nota, no entanto, é que há um equilíbrio entre o tempo necessário para atualizar o banco de dados e o tempo necessário para lê-lo sequencialmente. A manutenção de um banco de dados clusterizado irá aumentar significativamente a quantidade de trabalho necessário para adicionar, remover ou atualizar registros de qualquer maneira que possa afetar a seqüência de classificação. Se o banco de dados será lido sequencialmente com muito mais frequência do que ele será atualizado, clustering pode ser uma grande vitória. Se ele será atualizado frequentemente, mas raramente lidos em sequência, clustering pode ser um dreno grande desempenho, especialmente se a seqüência na qual os itens são adicionados ao banco de dados é independente da sua ordem de classificação no que respeita ao índice de cluster.

// Copiado de MSDN, o segundo ponto de índice não agrupado não é claramente mencionado em outras respostas.

Cluster

  • cluster índices classificar e armazenar as linhas de dados na tabela ou vista com base em seus valores de chave. Estas são as colunas incluídas na definição do índice. Só pode haver um índice agrupado por tabela, porque as linhas de dados em si podem ser armazenadas em uma única ordem.
  • A única vez que as linhas de dados em uma tabela são armazenados em ordem de classificação é quando a tabela contém um índice agrupado. Quando uma tabela tem um índice agrupado, a tabela é chamada de tabela em cluster. Se uma tabela não tem índice de cluster, suas linhas de dados são armazenados em um não-ordenada estrutura chamada um montão.

Nonclustered

  • índices agrupados têm uma estrutura separada das linhas de dados. UMA índice agrupado contém os valores de chave índice agrupado e
    cada entrada do valor de chave tem um ponteiro para a linha de dados que contém o valor da chave.
  • O ponteiro a partir de uma linha de índice de índice agrupado para uma linha de dados é chamado um localizador de linha. A estrutura do localizador fileira depende se as páginas de dados são armazenados em uma pilha ou uma tabela em cluster. Para uma pilha, um localizador de linha é um ponteiro para a linha. Para um cluster mesa, o localizador de linha é a chave índice agrupado.

Você pode ter passado por parte teórica dos posts acima:

-O índice agrupado como podemos ver pontos diretamente para gravar ou seja, a sua direta por isso leva menos tempo para uma pesquisa. Além disso, ele não vai tomar qualquer memória / espaço extra para armazenar o índice

-Enquanto, em índice não-agrupado, que indiretamente aponta para o índice de cluster, em seguida, ele vai acessar o registro real, devido à sua natureza indireta levará algum o que de mais tempo para access.Also ele precisa de sua própria memória / espaço para armazenar o índice

enter descrição da imagem aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top