MongoDb查询需要很长时间

时间:2012-08-01 10:09:01

标签: mongodb optimization indexing

我有一组矢量 集合的大小

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文本字段,同一查询不到一秒钟。 感谢

3 个答案:

答案 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})

然后你可以查看查询时间。