Étant donné ce champ key
est indexée dans les deux cas, la recherche d'index de complexité elle-même serait très similaire. Comme valeur de a
serait haché
, et stocké dans l'arborescence d'index.
Si nous recherchons le coût de performance global, la version hachée entraînerait un coût supplémentaire (négligeable) de hachage de la valeur de a
avant de faire correspondre la valeur dans l'arborescence d'index. Voir aussi mongo/db/index /hash_access_method.h
De plus, l'index haché ne pourrait pas utiliser compression de préfixe d'index ( WiredTiger) . La compression des préfixes d'index est particulièrement efficace pour certains ensembles de données, comme ceux à faible cardinalité (par exemple, pays) ou ceux avec des valeurs répétitives, comme les numéros de téléphone, les codes de sécurité sociale et les coordonnées géographiques. Il est particulièrement efficace pour les index composés , où le premier champ est répété avec toutes les valeurs uniques du second champ.
Généralement, il n'y a aucune raison de hacher une valeur hors plage. Pour choisir une clé de partition, considérez la cardinalité , fréquence , et taux de changement de la valeur.
L'index haché est couramment utilisé pour un cas spécifique de sharding . Lorsqu'une clé de partition la valeur est un croissant/décroissant de manière monotone valeur, la distribution des données serait susceptible d'aller dans un seul fragment. C'est là qu'une clé de fragment hachée pourrait améliorer la distribution des écritures. C'est un compromis mineur pour améliorer considérablement votre cluster de partitionnement. Voir aussi Hashed vs Ranged Sharding .
Que cela en vaille la peine dépend du cas d'utilisation. Une valeur de hachage personnalisée signifierait que toute requête pour la valeur de hachage devrait passer par un code de hachage personnalisé, c'est-à-dire une application.
L'avantage de l'utilisation de la fonction de hachage intégrée est que MongoDB calcule automatiquement les hachages lors de la résolution des requêtes à l'aide d'index hachés. Par conséquent, les applications n'ont pas besoin de calculer des hachages.