count()在MongoDB中是一个很慢的操作,具体如何提高count()的速度?

count()在MongoDB中是一个很慢的操作,具体如何提高count()的速度?,mongodb,Mongodb,我有一个名为ParseRequest的集合。它用共享密钥id进行着色。可能不是最佳选择,但现在我认为这并不重要,因为该集合只有40000个文档。 在本例中,我关注ParseRequest集合的两个属性:processed(布尔)和parsed(布尔) 我需要运行此查询,并且我希望它能够快速运行: db。ParseRequest.count({已处理:true,已分析:true}) 所以我尝试了两种不同的方法: 在已处理和已解析的 包含已处理并解析为碎片密钥 这两种方法都可以提高性能,但还不够,上

我有一个名为ParseRequest的集合。它用共享密钥id进行着色。可能不是最佳选择,但现在我认为这并不重要,因为该集合只有40000个文档。 在本例中,我关注ParseRequest集合的两个属性:processed(布尔)和parsed(布尔)

我需要运行此查询,并且我希望它能够快速运行:

db。ParseRequest.count({已处理:true,已分析:true})

所以我尝试了两种不同的方法:

  • 在已处理和已解析的
  • 包含已处理并解析为碎片密钥
  • 这两种方法都可以提高性能,但还不够,上面的count()只需2-3秒左右,但我需要比这快得多的速度

    值得注意的是,此查询将立即返回(几毫秒):

    db。查找({processed:true,parsed:true})。限制(5)

    但是

    db。ParseRequest.count({已处理:true,已分析:true})

    在这两种设置中仍然很慢

    还有什么我应该试试的吗

    与上面的这个特定示例不同,在MongoDB中,特定条件的一般count()操作非常昂贵。即使你有一个索引,它仍然是缓慢的做计数;比获取相同条件的前几行慢得多。有什么原因吗

    我来自SQL Server背景:计算计数(*)在SQL Server中一直是一件很快的事情。计算count对我的应用程序来说很重要,我对MongoDD的失望情绪越来越大,因此我考虑放弃MongoDB仅仅是因为这个原因:计算特定条件的count()太慢。但在我这么做之前,我想确定我已经用尽了所有可能的方法来改进计数计算。如有任何建议,我们将不胜感激。多谢各位

    -=-=-

    开始后编辑几条评论:

    我使用在Centos上运行的v2.2.6(64位)

    是的,解释说使用了idex,顺便说一句,如果没有索引,速度会更慢


    是的,我不理解为了计算特定条件的count(),需要扫描整个索引树,但请原谅我与SQL Server的比较,在SQL Server中,它也是一个完整的索引,但不知何故,count(*)更快,其他条件相同。那么在MongoDB中有什么技巧可以使用吗

    我会尝试升级到至少2.4.x版。count()在2.3.2中发布了一个性能修复程序

    Mongodb count查询可能重复的速度很慢,因为它必须扫描整个二叉树才能找到匹配的文档。您仍然可以通过创建适当的索引来提高性能。您是否尝试使用
    .explain()
    运行它以确认是否正在使用索引?您使用的是什么版本的MongoDB?