Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

哈希(Hashed)索引

在此页面上

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

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

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

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

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

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

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

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

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

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

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

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

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

重要

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

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

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

后退

限制