Ao criar um índice não clusterizado, o nível folha conterá uma referência às linhas da tabela original:
- se a tabela tiver índice clusterizado, o nível folha conterá a chave do índice clusterizado;
- se a tabela não tiver índice clusterizado (um heap), o nível folha conterá um ponteiro para o endereço físico da linha na tabela;
Minha pergunta é por que o índice não clusterizado não foi projetado para conter o endereço físico em ambos os casos (além da chave de índice clusterizado). Ele pode salvar as leituras do B-Tree para pesquisas de chave quando o índice clusterizado é definido.
Um motivo pelo qual o localizador de linha física não é armazenado nos nós de folha de índice não clusterizados é porque o valor precisaria ser atualizado sempre que o local da linha física fosse alterado devido a divisões de página, reorganizações etc. Ter apenas a chave CI como a linha exclusiva localizador em índices não clusterizados evita essa manutenção, que seria especialmente cara em uma tabela com muitos índices não clusterizados.
Observe que isso não é uma consideração tão importante com heaps porque eles não sofrem com as divisões de página, embora os ponteiros de encaminhamento sejam considerados quando as linhas são atualizadas para um tamanho maior.