Dado esse campo
key
é indexado em ambos os casos, a pesquisa de índice de complexidade em si seria muito semelhante. Como o valor de a
seria com hash
, e armazenado na árvore de índice. Se estivermos procurando o custo de desempenho geral, a versão com hash incorreria em um custo extra (insignificante) de hash do valor de
a
antes de corresponder o valor na árvore de índice. Veja também mongo/db/index /hash_access_method.h
Além disso, o índice com hash não poderia utilizar a compressão de prefixo de índice ( Tigre com Fio) . A compactação de prefixo de índice é especialmente eficaz para alguns conjuntos de dados, como aqueles com baixa cardinalidade (por exemplo, país) ou aqueles com valores repetidos, como números de telefone, códigos de previdência social e coordenadas geográficas. É especialmente eficaz para índices compostos , onde o primeiro campo é repetido com todos os valores exclusivos do segundo campo.
Geralmente não há razão para hash um valor que não seja de intervalo. Para escolher uma chave de fragmentação, considere a cardinalidade , frequência e taxa de alteração do valor.
O índice com hash é comumente usado para um caso específico de fragmentação . Quando uma chave de fragmentação valor é um aumentando/diminuindo monotonicamente valor, a distribuição de dados provavelmente entraria em apenas um fragmento. É aqui que uma chave de fragmentação com hash pode melhorar a distribuição de gravações. É uma pequena compensação melhorar muito seu cluster de fragmentação. Consulte também Fragmento de hash vs Intervalo .
Se vale a pena, depende do caso de uso. Um valor de hash personalizado significaria que qualquer consulta para o valor de hash teria que passar por um código de hash personalizado, ou seja, aplicativo.
A vantagem de utilizar a função de hash integrada é que o MongoDB calcula automaticamente os hashes ao resolver consultas usando índices de hash. Portanto, os aplicativos não precisam calcular hashes.