Performance python检查是否找到mongodb记录的速度很慢
我有一个到MongoDB的python(3.2)请求,请求本身运行速度足够快。然后,当我执行if语句检查以查看是否找到任何记录时,所需时间是以下时间的50倍:Performance python检查是否找到mongodb记录的速度很慢,performance,mongodb,python-3.x,Performance,Mongodb,Python 3.x,我有一个到MongoDB的python(3.2)请求,请求本身运行速度足够快。然后,当我执行if语句检查以查看是否找到任何记录时,所需时间是以下时间的50倍: Line # Hits Time Per Hit % Time Line Contents ============================================================== 58 27623 6475988 234
Line # Hits Time Per Hit % Time Line Contents
==============================================================
58 27623 6475988 234.4 1.7 itemInDB = db.mainData.find({"x":item[x]}).limit(1)
59
60 #existing item in db
61 27623 293419802 10622.3 77.6 if itemInDB.count():
如果这个声明花了这么长时间,到底是什么原因?!我想一定有更好的方法来检查是否找到了一条记录,但谷歌却一无所获
谢谢你的帮助 也许是更好的方法
如果您只对返回一个值感兴趣,您可能希望使用find\u one
而不是find
。它将在找到一个值后停止查找值,而不是find
,后者必须在集合中运行:
itemInDB = db.mainData.find_one({"x":item[x]})
if itemInDB:
print("Item found")
else:
print("Item not found")
以你为例
根据,在查询游标计数时,可以传入参数(True
或False
),以考虑以前对游标进行的任何跳过
或限制
调用。该参数的默认值为False
(即不考虑这些调用)。这可能会影响计数
查询的性能
衡量查询性能
如果您想查看mongo将如何执行查询,可以调用光标:
db.coll.find({"x":4}).explain()
explain函数也是如此。结果表明它是由于find()函数而不是if语句造成的。我在“x”上创建了一个索引(无论如何我都应该这样做)。将find更改为find_one,并从if语句中删除.count()。总体速度提高了75%。findOne显然比find()差。我之前实现的限制(1)实际上使其运行速度慢了3秒(代码在大约30k次迭代的循环中),限制也没有效果。