我是MongoDB的新手。我已经编写了一个在mongo shell中运行的JS查询。
基本上,我有两张表。这两个网站都有近16万条记录。
我正在检查第一个表,对于每个记录,转到第二个表,看看那里是否存在相应的记录。
pbp = db.poss_pbp.find().batchSize(1000)
while(pbp.hasNext()){
pbp_temp = pbp.next();
id = (pbp_temp["poss_idx"]);
opt_temp = db.poss_opt.find({"poss_idx": id}).count()
if(opt_temp == 0)
{
//Do something
}
}查询速度非常慢(每1000条记录大约需要4-5分钟)。我能做些什么来让它更快地工作?关键字"poss_idx“在数据库中有索引。
发布于 2013-06-12 12:30:02
我认为索引有问题。我有两个类似的表: 200,000条记录和大约500,000条。类似的请求在有索引的情况下执行大约40秒,在没有索引的情况下执行很长时间。
运行查询:
db.poss_opt.find({poss_idx: "some_id"}).explain()如果上面的查询不能使用索引,您将看到:
{
"cursor": "BasicCursor",
"nscannedObjects": 532543,
"nscanned": 532543,
"millis": 712,
"indexBounds": {},
}否则:
{
"cursor": "BtreeCursor poss_idx_1",
"nscannedObjects": 0,
"nscanned": 0,
"millis": 0,
"indexBounds": {"poss_idx": [["some_id", "some_id"]]},
}若要查看集合的索引信息,请使用db.poss_opt.stats()和db.poss_opt.getIndexes()
如果问题出在索引上,请尝试删除并创建新的索引:
db.poss_opt.dropIndex({poss_idx: 1})
db.poss_opt.ensureIndex({poss_idx: 1})如果您有任何问题,请随时提出。
https://stackoverflow.com/questions/17054654
复制相似问题