来自MongoDB文档
如果您在多个字段上有复合索引,则可以使用它来查询字段的起始子集。所以如果你有一个索引 A,B,C 你可以在[a] [a,b] [a,b,c]
上使用它查询
因此,假设我有这个字段的文档
我的索引顺序是[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);
答案 0 :(得分:3)
这两个问题的答案是是。
对于第一个查询,性能取决于结果集的选择性。因此,如果索引中的3个字段与大量文档匹配,则性能会很慢,因为需要扫描所有这些文档以匹配ExtraField。如果只匹配几个文档,性能会很快。
现在,如果您的查询根本不包含索引中的第一个字段,则不会使用索引 。例如,以下查询将无法使用索引:
var q = (from c in collection.AsQueryable()
where Name = "test"
where Country = 1
select c);
查看有关在索引中查找其他字段组合的一些有趣事实,请查看here。
如果对此类问题有疑问,我会建议using the explain command。