Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os índices são usados como pontos de entrada para tabelas com otimização de memória. Ler linhas de uma tabela requer um índice para localizar os dados na memória.
Um índice de hash consiste em uma coleção de buckets organizados em uma matriz. Uma função de hash mapeia as chaves de índice para buckets correspondentes no índice de hash. A figura a seguir mostra três chaves de índice mapeadas para três buckets diferentes no índice de hash. Para fins de ilustração, o nome da função de hash é f(x).
A função de hash usada para índices de hash tem as seguintes características:
O SQL Server tem uma função de hash que é usada para todos os índices de hash.
A função hash é determinística. A mesma chave de índice é sempre mapeada para o mesmo bucket no índice de hash.
Várias chaves de índice podem ser mapeadas para o mesmo bucket de hash.
A função de hash é equilibrada, o que significa que a distribuição dos valores de chave de índice em buckets de hash normalmente segue uma distribuição de Poisson.
A distribuição Poisson não é uma distribuição uniforme. Os valores de chave de índice não são distribuídos uniformemente nos buckets de hash. Por exemplo, uma distribuição de Poisson de n chaves de índice distintas entre n compartimentos de hash resulta em aproximadamente um terço de compartimentos vazios, um terço contendo uma chave de índice, e o último terço contendo duas chaves de índice. Um pequeno número de buckets conterá mais de duas chaves.
Se duas chaves de índice forem mapeadas para o mesmo bucket de hash, haverá uma colisão de hash. Um grande número de colisões de hash pode impactar o desempenho nas operações de leitura.
A estrutura de índice de hash na memória consiste em uma matriz de ponteiros de memória. Cada bucket é mapeado para um deslocamento nessa matriz. Cada bucket na matriz aponta para a primeira linha desse bucket de hash. Cada linha no bucket aponta para a próxima linha, resultando em uma cadeia de linhas para cada bucket de hash, conforme ilustrado na figura a seguir.
A figura tem três buckets com linhas. O segundo balde do topo contém as três linhas vermelhas. O quarto recipiente contém a única linha azul. O bucket inferior contém as duas linhas verdes. Essas podem ser versões diferentes da mesma linha.
Para obter mais informações sobre índices para tabelas com otimização de memória, consulte Diretrizes para usar índices em tabelas de Memory-Optimized.