我有一组矢量 集合的大小
print vectors.count()
是
102020
当我遍历字段时
start = time.time()
for v in vectors.find({},{'vector' : 1, '_id' : 0}):
pass
print "total time:" , end-start
总时间:5.05100011826
但是当我使用explain()运行时,我发现查询花费的时间要少得多。
print vectors.find({},{'vector' : 1, '_id' : 0}).explain()
{u'nYields':0,u'allPlans':[{u'cursor':u'BasicCursor',u'indexBounds':{}}],u'nChunkSkips':0,你' millis':23 ,u'n':102020,u'cursor':u'BasicCursor',u'indexBounds':{},u'nscannedObjects':102020,u'isMultiKey':False,u' indexOnly':False,u'nscanned':102020}
为什么会有如此巨大的时差?反正有加速吗? 我将所有向量加载到sql DB文本字段,同一查询不到一秒钟。 感谢
答案 0 :(得分:1)
我的猜测是,第二个只显示mongoDB实际执行'find'所需的速度,而前者还涉及将每个记录检索到控制台并处理它们。
答案 1 :(得分:0)
在迭代结果时,您可能希望使用batch_size来提高速度并减少网络跃点数。
start = time.time()
for v in vectors.find({},{'vector' : 1, '_id' : 0}).batch_size(1000):
pass
print "total time:" , end-start
答案 2 :(得分:0)
您可以为要查询的字段提供索引,在您的情况下为"vector"
,即:
vectors.createIndex({"vector":1},{sparse:true})
然后你可以查看查询时间。