Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

哈希(Hashed)索引

在此页面上

  • 用例
  • 行为
  • 浮点数
  • 限制
  • 开始体验
  • 详情
  • 哈希函数
  • 嵌入式文档
  • 了解详情

哈希索引收集并存储索引字段值的哈希值。

哈希索引支持使用哈希分片键分片基于哈希的分片使用字段的哈希索引作为分片键,在分片集群中对数据分区。

哈希索引非常适合具有单调变化字段(例如ObjectId值或时间戳)的分片键。当您使用具有单调递增的分片键值的范围分片时,上限为 MaxKey的数据段会接收大多数传入写入。这种行为将插入操作限制为单个分片,从而消除了分片集群中分布式写入的优势。

有关为应用程序选择最佳分片方法的更多信息,请参阅哈希与范围分片

哈希索引会在行哈希运算之前将浮点数截断为 64 位整数。例如,哈希索引使用相同的哈希来存储值 2.32.22.9。这是一种冲突,其中的多个值被分配给单个哈希键。冲突可能会对查询性能产生负面影响。

为防止冲突,请勿对无法可靠转换为 64 位整数(然后再转换回浮点数)的浮点数使用哈希索引。

哈希索引不支持大于 253 的浮点数。

哈希索引对数组字段和唯一属性有限制。

哈希函数不支持多键索引。您无法在包含数组的字段上创建哈希索引,也无法将数组插入哈希索引字段。

不能在哈希索引上指定唯一约束。相反,您可以创建具有唯一约束的附加非哈希索引。MongoDB 可以使用该非哈希索引来强制实施所选字段的唯一性。

要创建哈希索引,请参阅创建哈希索引

本部分介绍哈希索引的技术细节。

重要

当 MongoDB 使用哈希索引解析查询时,会使用哈希函数自动计算哈希值。应用程序需计算哈希值。

要查看某个键的哈希值,请使用 convertShardKeyToHashed() 方法。此方法使用与哈希索引相同的哈希函数。

哈希函数会折叠嵌入的文档,并计算整个值的哈希值。

← 地理空间索引限制