mongodb - MongoDB:按两个字段索引的最快方法?
问题描述
我使用 MongoDB 作为游戏服务器网络的数据库。网络上的每个玩家都有两种识别他们的方式:他们的用户名和他们的 UUID。这两个字段对于每个玩家都是唯一的,并且根据玩家的姓名检索玩家的 UUID、根据他们的 UUID 检索他们的姓名以及根据他们的姓名或他们的 UUID 检索整个文档通常很有用。在不考虑空间要求的情况下,哪种索引方案可以让这些查询以最快的速度运行?
我的想法是为这两个字段中的每一个创建一个唯一索引,但我很好奇 MongoDB 是否提供了更好的优化,尤其是当我只想检索一个给定另一个字段时。我读过复合索引可以允许覆盖查询,其中不需要检索完整的文档,但我不确定与每个字段都有一个索引相比,这是否会降低性能。
解决方案
性能总是取决于瓶颈所在(无论是磁盘 I/O、网络、CPU 还是 RAM),但如果您的播放器文档非常大,两个复合索引会有所帮助:[UUID,username]和[username,UUID]。第一个将是检索给定 UUID 的用户名的最有效方法,后者将有助于检索给定用户名的 UUID。
但在实践中,我认为仅 [username] 和 [UUID] 上的唯一索引几乎一样快。
推荐阅读
- forms - CakePHP 3.6 多语言表格
- ios - Cordova ios 应用程序构建错误显示 - clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- azure - 筛选 Azure 数据工厂中的活动
- angular - Visualforce 重新渲染和 Angular
- java - Apache Spark:从 IDE 远程运行作业时的无限循环
- java - 用于波斯文文档的 PDFBOX
- php - yii2 显示错误信息
- javascript - 从 Javascript 调用 Grafana Angular TimePickerCtrl 函数
- python-3.x - 将 lda2vec 库与其他类型的词向量一起使用
- python - Python 3.6 - “NoneType”测试失败