索引会使 find_one() 更快吗?
Will indexing make find_one() any faster?
如果我有一个 pymongo 查询,在一个包含大约 4000 个文档的集合中,如下所示:
mong = pymongo.Connection()['ASD_2']['APS2']
py_mong = mong.find_one({'plate':'123456'})
考虑到 find_one()
不允许 .explain()["cursor"]
或 .explain()["nscanned"]
,因此手头没有方法可以查明扫描的性质,谁能告诉我这是否值得当我只打算使用 find_one()
时索引集合?
是的,索引将避免对所请求的板进行线性搜索并以对数时间工作(快得多)。
是的,绝对。
我怎么知道?
首先,如果没有,那将是完全不能接受的。人们会抱怨 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)
如果我有一个 pymongo 查询,在一个包含大约 4000 个文档的集合中,如下所示:
mong = pymongo.Connection()['ASD_2']['APS2']
py_mong = mong.find_one({'plate':'123456'})
考虑到 find_one()
不允许 .explain()["cursor"]
或 .explain()["nscanned"]
,因此手头没有方法可以查明扫描的性质,谁能告诉我这是否值得当我只打算使用 find_one()
时索引集合?
是的,索引将避免对所请求的板进行线性搜索并以对数时间工作(快得多)。
是的,绝对。
我怎么知道?
首先,如果没有,那将是完全不能接受的。人们会抱怨 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)