索引会使find_one()更快吗?

时间:2015-07-21 16:43:53

标签: python python-2.7 indexing pymongo

如果我有一个pymongo查询,在一个包含大约4000个文档的集合中,如下所示:

mong  =  pymongo.Connection()['ASD_2']['APS2'] 
py_mong = mong.find_one({'plate':'123456'})

考虑到.explain()["cursor"]上不允许.explain()["nscanned"]find_one(),因此没有任何方法可以找出扫描的性质,任何人都可以告诉我它是否是{&1;}当我只使用find_one()时,是否值得为该集合编制索引?

2 个答案:

答案 0 :(得分:1)

是的,索引将避免对所请求的印版进行线性搜索,并以对数时间(更快)工作。

答案 1 :(得分:1)

是的,绝对。

我怎么知道?

首先,如果它没有,那将是完全不可接受的。与find_one相比,人们会抱怨find令人惊讶且不必要的缓慢,开发团队会修复它(或冒着被视为愚蠢的风险)。

其次,我检查了代码。实现正是您所期望的,这意味着find_one仅仅是find的包装:

def find_one(self, spec_or_id=None, *args, **kwargs):
    if spec_or_id is not None and not isinstance(spec_or_id, dict):
        spec_or_id = {"_id": spec_or_id}
    for result in self.find(spec_or_id, *args, **kwargs).limit(-1):
        return result
    return None

(pymongo版本2.4.2)