MongoDB中的复合索引效率不明确

MongoDB中的复合索引效率不明确,mongodb,indexing,Mongodb,Indexing,我正在寻找一个结构来保存一个discord机器人的用户数据。 上下文是,我需要一个唯一的保存为每个不和谐服务器(又名帮会)的用户,他是在。 因此,userID和guildID都不应该是唯一的,但我可以使用它们作为复合索引,在users集合中快速查找用户 到目前为止,我的思路正确吗 我的实际问题是: 哪个ID应该是它“排序”的第一个索引? 每个公会有数百或数千个用户,但是一个用户在机器人所在的1-5个公会上。 因此,Guidid的第一次搜索将使用户ID搜索的数据量稍微减少。 但是,首先搜索user

我正在寻找一个结构来保存一个discord机器人的用户数据。 上下文是,我需要一个唯一的保存为每个不和谐服务器(又名帮会)的用户,他是在。 因此,userID和guildID都不应该是唯一的,但我可以使用它们作为复合索引,在users集合中快速查找用户

到目前为止,我的思路正确吗

我的实际问题是:

哪个ID应该是它“排序”的第一个索引? 每个公会有数百或数千个用户,但是一个用户在机器人所在的1-5个公会上。 因此,Guidid的第一次搜索将使用户ID搜索的数据量稍微减少。 但是,首先搜索userID会使Guidid搜索的数据量更小。 因为DB无论如何都会完全搜索这两个索引,所以step1对这两个索引都会很快,第二个想法是先按用户ID过滤,然后按Guidid过滤,对我来说似乎更有效

我想知道我的假设是否可行,如果不可行,为什么不可行。 或者如果有更好的方法,我还没有想到


提前谢谢

复合指数效果良好。
仍然不足以看出它们在实现上的任何差异,所以我不知道这一点。

在使用假设之前,最好检查查询执行时间,记下它,检查解释对象,应用索引,再次检查查询执行时间,注意差异并再次检查“解释对象”以查看应用的任何效果。此外,索引应该针对应用程序上的
主要
工作。换句话说,您可以保留索引,以便优化采用最长路径的查询!谢谢你的提示,但问题是,我想在实际实现它之前对它进行排序。当然,如果没有简单的答案,我只会在以后的某个日期尝试并比较性能,当数字足够高时,会非常重要。(我现在有60000个用户)但是关于专业,我确实相信用户ID是最大的负载,因为这是定义用户的唯一东西,而且几乎是唯一的,只是我保存了多个版本,每个guildFact都保存一个,你很清楚你的需求,你知道如果选择得当,复合索引是多么的有效。明显的提示是,在应用程序中计算出你的
昂贵的
操作,并相应地选择你的索引(单键/复合键/多键),如果可能的话,最好有一个覆盖查询。我建议您在这里阅读: