在创建一个简单的MongoDB查询时,我对查询中的条件顺序有疑问 - 比如(使用Mongoose.js语法):
conditions = { archived: false, first_name: "Billy" };
对比
conditions = { first_name: "Billy", archived: false };
..在一个简单的find()函数中:
User.find(conditions, function(err, users) { <some logic> });
假设使用简单的单键索引策略:
UserSchema.index( { first_name: 1, archived: 1} );
..上面列出的条件顺序是否重要?
重要提示:我知道对于复合索引,顺序很重要,但是针对单键索引查询,如上所述,我想知道是否重要。同时也对完全没有索引的查询感兴趣。 :)
另一种解释:换句话说,假设有100个User
(50个已存档,50个未存档),给定两种可能的MongoDB内部搜索策略:
- 首先过滤掉所有50个
archived
用户,然后在剩余的50个非存档用户中搜索名称为“Billy”的first_name
值。 - 首先搜索所有100个
User
文档,查找first_name
值为“Billy”的文档,然后通过删除任何已归档的Billy来过滤找到的对象。
..我会认为#1更快(在具有两个以上条件的大型查询中潜在地快得多)。 但无论哪一个更快以及为什么,肯定有一个更快。
CORE QUESTION: 在复合索引的广阔而强大的世界之外,MongoDB是否知道如何自动执行其最有效/快速的搜索/过滤,而不管字段和顺序如何? 或者我们需要通过编程方式告诉系统什么是最好的(通过呈现条件的顺序等)?