Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como um índice não clusterizado pode gerar uma coluna que não está incluída no índice


Se a própria tabela estiver agrupada , todos os índices secundários conterão uma cópia da chave de cluster (uma chave que determina a ordem física das linhas na tabela de cluster).

O motivo:as linhas em uma tabela clusterizada são fisicamente armazenadas em uma árvore B (não no heap da tabela) e, portanto, podem mover quando os nós da árvore B são divididos ou aglutinados, então o índice secundário não pode conter apenas o "ponteiro" da linha (uma vez que estaria em perigo de "pendurar" após a movimentação da linha).

Muitas vezes, isso tem um efeito prejudicial no desempenho - consultar por meio de índice secundário pode exigir pesquisa dupla :
  • Primeiro, pesquise o índice secundário e obtenha a chave de clustering.
  • Segundo, com base na chave de cluster recuperada acima, pesquise na própria tabela clusterizada (que é a árvore B).

No entanto, se tudo o que você deseja são os campos da chave de cluster, apenas a primeira pesquisa é necessária.

Também conhecido como "índice clusterizado" no MS SQL Server.

Normalmente, mas não necessariamente uma CHAVE PRIMÁRIA no MS SQL Server.

É lamentável que o cluster esteja ativado por padrão no MS SQL Server - as pessoas geralmente deixam o padrão sem considerar totalmente seus efeitos. Quando o clustering não for apropriado, você deve especificar a palavra-chave NONCLUSTERED explicitamente para desativá-la.