一个集合中有30,000,000条记录。 当我在java上对此集合使用distinct命令时,大约需要4分钟,结果的计数大约为40,000。 mongodb的独特运作是如此低效吗? 我怎样才能提高效率呢?
答案 0 :(得分:1)
mongodb的独特操作是否效率低下?
30米记录?我会说4分钟实际上相当不错,我认为这一点同样快,可能比SQL快一点。
我可能会在说它效率低之前在其他数据库中对此进行测试。
然而,查看性能的一种方法是查看字段是否首先被索引,以及该索引是否在RAM中,或者是否可以在没有页面抖动的情况下加载。只要字段具有索引,Distinct()就可以使用索引。
如何才能提高效率呢?
您可以使用以下两种方法:
这是两种最可行的解决方法。
Distinct()不会过时,如果符合您的需求,实际上比$ group更高效,因为它可以使用索引。
答案 1 :(得分:0)
.distinct()
操作是旧操作,.group()
也是如此。一般来说,这些已经被.aggregate()所取代,这些应该优先于这些行为使用:
db.collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}
)
将"$field"
替换为您希望从中得到明确计数的任何字段。 $
前缀字段名称以指定值。
查看文档,特别是$group
以获取更多信息。