我有一个LINQ查询,可以在MongoDB中搜索超过5000万条记录。我在我的查询中使用了和运算符,如下所示:
(from e in this.collection.AsQueryable<SocialRecord>()
where
bArray.Contains(e.TermMonitorIds) &&
(sources.Contains(e.SocialType)) &&
(e.DateCreated >= fr) &&
(e.DateCreated <= to)
select e)
.OrderByDescending(e => e.SocialCount)
.ToList();
如果我按以下方式更改查询,是否会提高性能:
(from e in this.collection.AsQueryable<SocialRecord>()
where
(e.DateCreated >= fr) &&
(e.DateCreated <= to) &&
bArray.Contains(e.TermMonitorIds) &&
(sources.Contains(e.SocialType))
select e)
.OrderByDescending(e => e.SocialCount)
.ToList();
..因为DateCreated
是分隔大量记录的那个。有没有办法改进上面的查询?
答案 0 :(得分:2)
如果这是一个内存中查找,那么它会更快,因为C#对&&
operator使用短路评估,因此首先检查日期范围会过滤掉不匹配的节点。 / p>
但是,我不确定mongoDB的内部工作方式,所以它真的取决于它是否也支持AND
条件的短路评估。
原来MongoDB 支持short-circuit evaluation for $and。