Dol*_*lev 0 mongodb database-performance
我正在针对我的 MongoDB 运行测试,由于某种原因,find其性能与count.
统计数据:订单集合大小:~20M,product_id 6 的订单:~5K
对product_id 建立索引以提高性能。
查询:db.orders.find({product_id: 6})vsdb.orders.find({product_id: 6}).count()
结果 0.08ms 后产品订单与 5K 的结果
为什么计数没有显着加快?它可以使用product_id索引找到第一个和最后一个元素的位置
小智 6
正如Mongo 的 count 文档所述,调用与count调用相同find,但它不返回文档,而只是对它们进行计数。为了执行此计数,它会遍历游标。它不能只读取索引并根据某个 ID 的第一个和最后一个值确定文档的数量,特别是因为您可以在非 ID 的其他字段上建立索引(并且 Mongo ID 不会自动递增)。所以基本上find和count是相同的操作,但它不是获取文档,而是只是遍历它们并总结它们的数量并将其返回给您。
另外,如果您想要更快的结果,您可以使用estimatedDocumentsCount(docs),它将直接转到集合的元数据。这会导致无法询问“如果触发此查询,我可以获得多少文档?”。如果您需要以更快的方式查找查询的文档计数,那么您可以使用countDocuments( docs ),它是聚合查询的包装器。根据我对 Mongo 的了解,提供的查询看起来是一种无需调用即可计算查询结果的最快方法count。我想这应该是从现在开始计算文档性能的首选方式(因为它是在版本 4.0.3 中引入的)。