使用linq时,哪一个查询性能更好,另一个使用本机查询机制
LINQ
var query =
collection.AsQueryable<Employee>()
.Where(e => e.FirstName == "John")
.Select(e => e);
NATIVE
var query= Query<Employee>.EQ(e => e.FirstName, "John");
var emp = collection.FindOne(query);
我假设mongoDb中的本机查询机制会更好,因为据我所知,它会过滤掉数据库中的结果,其中linq首先获取集合中的所有项目,然后过滤结果。我应该何时考虑使用LINQ而不是本机查询机制?
答案 0 :(得分:19)
因为,据我所知,它过滤掉了结果 数据库,其中linq首先获取集合中的所有项目 然后筛选结果
不,不,不。它过滤数据库级别的所有内容。
第二个不是构建mongodb查询的本机方式。它仍然是相同的包装器,只需构建真正的原生 mongod查询(例如{"a": 1, "b": 2 }
)。
第一个查询使用表达式树来构建mongo查询。第二个使用反射来构建相同的查询。据我所知,表达树应该更快(here is我找到的第一篇文章)。无论如何,我不认为性能差异至关重要。所以只需使用你喜欢的东西。
至于我,我使用linq进行大多数查询,有些开发人员甚至可能对mongo不太了解,但这里的黑方是你实际上可能没有意识到它可以为你构建什么查询。 (与linq到sql的情况相同)。但您仍然可以记录所有本机查询,查看它们并查找优化和更改的位置。对于复杂的查询,我通常使用第二种方法。