MongoDB索引2个字段并让索引用于第3个字段的搜索

时间:2012-09-05 10:11:14

标签: mongodb indexing mongodb-indexes database

来自MongoDB文档

  

如果您在多个字段上有复合索引,则可以使用它来查询字段的起始子集。所以如果你有一个索引   A,B,C   你可以在[a] [a,b] [a,b,c]

上使用它查询

因此,假设我有这个字段的文档

  1. 用户ID
  2. 名称
  3. 国家
  4. ExtraField
  5. 我的索引顺序是[UserID,Name,Country]

    所以,如果我有像

    这样的查询
      var q = (from c in collection.AsQueryable()
                     where c.UserID == UserID
                     where Name = "test"
                     where Country = 1
                     where ExtraField = "check"
    
                     select c);
    

    此查询是否对前3个参数使用索引,然后搜索没有索引的ExtraField?

    如果是,那么此查询也是如此

     var q = (from c in collection.AsQueryable()
                     where c.UserID == UserID                   
                     where ExtraField = "check"
    
                     select c);
    

1 个答案:

答案 0 :(得分:3)

这两个问题的答案是

对于第一个查询,性能取决于结果集的选择性。因此,如果索引中的3个字段与大量文档匹配,则性能会很慢,因为需要扫描所有这些文档以匹配ExtraField。如果只匹配几个文档,性能会很快。

现在,如果您的查询根本不包含索引中的第一个字段,则不会使用索引 。例如,以下查询将无法使用索引:

var q = (from c in collection.AsQueryable()
              where Name = "test"
              where Country = 1
              select c);

查看有关在索引中查找其他字段组合的一些有趣事实,请查看here

如果对此类问题有疑问,我会建议using the explain command