我很好奇调用findOne()
十次和使用十个参数调用find()
之间的性能差异。后者足够好吗?
答案 0 :(得分:1)
一般来说,在您的环境中使用您的数据进行测试是有意义的,但理论上的答案是:它取决于,但通常,是 - 它可以提高性能因为它减少往返次数到数据库,并且网络延迟通常是主导因素,除非您的查询效率非常低。这在生产中更为突出,并且具有多个数据中心,并且在localhost上的问题较少。
问题在于你的十个参数来自哪里 - 如果你想按id选择一组10个元素,$in
-query更优雅,更快速。但是,您还可以在$or
- 查询中使用十个不同的查询,并且仍然可以减少往返次数。但是,有一些pitfalls with $or
and indexes that are described well in the documentation。
减少往返次数的主题也被称为N+1 problem in the context of pseudo-joins,并且广泛的协议是减少往返次数是关键。