我正在使用MongoDB,我想显示集合中的最后10个条目,这些条目应按分数排序。问题是大约有200万个条目,因此每个查询需要5到7秒的时间。
当数据库较小但随着大小增加时,事情运行得很好。我检查了.explain('executionStats')
,发现结果是nReturened: 10
和totalDocsExamined: 1959933
,这意味着它将遍历整个数据库以返回最后10个条目。 (如果有人需要该信息,也totalKeysExamined: 0
)
搜索查询如下:
db.logs.find({}).sort({"score":-1}).limit(10).toArray()
查询阶段为COLLSCAN, SORT_KEY_GENERATOR, SORT
我知道find({})
正在遍历整个数据库,然后对其进行排序,并获得最后10个结果。但是,加快速度的更好方法应该是什么?
答案 0 :(得分:2)
在{score: 1}
上创建索引会很有帮助。如果可用,Mongo肯定会使用索引进行排序。创建索引后,您应该看到IXSCAN,FETCH和LIMIT阶段。
答案 1 :(得分:1)
您需要在mongodb中执行搜索的键上创建索引。 索引将帮助您更快地检索数据。
使用:db.collection.createIndex(keys, options)
有关更多信息,请阅读文档MongoDB create index
希望这会有所帮助。祝你好运!