MongoDb中使用 Count 对一个超过1000w条数据的集合进行查询(已建立索引)
按指定条件返回包含在集合中的文档总数(需求是 Count中要包含条件,不能直接db.collection.count())
但是整个操作十分慢,甚至造成服务器死机;
MongoDb 在服务器上只存在一个实例,没有进行分布;
执行的脚本如下(集合中value == 0 的文档数大约在3,000,000左右):
`dbName: MyDb
CollectionName: MyCollection
CollectionCount: 13,630,100
Shell:
db.MyCollection.find({"value":0}).count();
或
db.MyCollection.count({"value":0}); `
结果: 要等待很漫长的时间才会得到,服务器的内存几乎耗尽;若不包含条件的统计(db.MyCollection.count())则很快
C#>
//驱动使用Samus
结果: 出现超时,无法通讯,若不包含条件的统计(collection.count())则很快;求解决方案;
一般来说,id应该是一个主键,同时,要针对id来建立索引。
这样的话,在Query执行的时候,会从索引中获得性能提高。
如果你的文档里面有300W条相同的记录,这样的话,如果在没有索引的时候,性能相当不好。
而且,一般的实际场景中,不应该有300w条同样主键的记录。不然就没有索引的意义了。
当然,如果真的有300w条id=1,300w条id=2,300w条id=3,300w条id=4的记录。
最好的做法是将这些记录放入Shard里面,不同的Shard存放不能ID的记录。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。