find比findOne的性能高10倍?

发布问题 回首页

find比findOne的性能高10倍?

★ 0 成为第一个关注这个问题的人

我的环境:RHEL6.4,64位,mongodb 3.0.1 装在vspare上,8G内存,4核Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
在表中插入10万条数据,分别用find和findOne循环10万次查询,每次查一条,发现findOne耗费的时间是find的十倍,这是为什么?开始用python跑是这样,后来直接在mongo中跑也是这样,脚本如下:
c1.remove({})
for (i=1;i<=100000;i++) {
db.c1.insert({'_id':i,'content':'12345678901234567890'})
}

for (i=1;i<=100000;i++) {
db.c1.find({'_id':i})
}

for (i=1;i<=100000;i++) {
db.c1.findOne({'_id':i})
}

TJ 在大约 之前 回答了
  • 提问于
  • 回答数1 个
  • 浏览 1251 次
  • 最新活跃于

1 个回答1

1
TJ answered about

find()返回的是一个cursor,没有数据,只需要搜索一下索引表就可以返回。
findOne() 需要返回数据,如果数据不在内存还需要读盘。

To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create