首页 > 解决方案 > MongoDB:按两个字段索引的最快方法?

问题描述

我使用 MongoDB 作为游戏服务器网络的数据库。网络上的每个玩家都有两种识别他们的方式:他们的用户名和他们的 UUID。这两个字段对于每个玩家都是唯一的,并且根据玩家的姓名检索玩家的 UUID、根据他们的 UUID 检索他们的姓名以及根据他们的姓名或他们的 UUID 检索整个文档通常很有用。在不考虑空间要求的情况下,哪种索引方案可以让这些查询以最快的速度运行?

我的想法是为这两个字段中的每一个创建一个唯一索引,但我很好奇 MongoDB 是否提供了更好的优化,尤其是当我只想检索一个给定另一个字段时。我读过复合索引可以允许覆盖查询,其中不需要检索完整的文档,但我不确定与每个字段都有一个索引相比,这是否会降低性能。

标签: mongodboptimizationindexingnosql

解决方案


性能总是取决于瓶颈所在(无论是磁盘 I/O、网络、CPU 还是 RAM),但如果您的播放器文档非常大,两个复合索引会有所帮助:[UUID,username][username,UUID]。第一个将是检索给定 UUID 的用户名的最有效方法,后者将有助于检索给定用户名的 UUID。

但在实践中,我认为仅 [username] 和 [UUID] 上的唯一索引几乎​​一样快。


推荐阅读