LINQ查询和操作员性能

时间:2014-06-20 08:44:56

标签: c# linq mongodb

我有一个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是分隔大量记录的那个。有没有办法改进上面的查询?

1 个答案:

答案 0 :(得分:2)

如果这是一个内存中查找,那么它会更快,因为C#对&& operator使用短路评估,因此首先检查日期范围会过滤掉不匹配的节点。 / p>

但是,我不确定mongoDB的内部工作方式,所以它真的取决于它是否也支持AND条件的短路评估。


原来MongoDB 支持short-circuit evaluation for $and