有什么方法可以提高我的mongodb查询的性能吗?
我有一个包含大约60,000个文档的数据库,它会变得更大,所以我需要开始考虑性能。
我有一个ID列表,循环查找正确的文档,然后按员工数量进行过滤。 ID列表由另一个集合中的另一个查询生成。
id_list = ['12412412', '42141241', '41241241', etc...]
for i in id_list:
keyword = '{}.employees'.format(i)
query = db.collection.find_one({keyword: {'$gt': 2}}, {'_id': False})
result.append(query)
运行这样的查询大约需要27秒。
集合的结构如下所示。
{
'412412421': {
'name':'company name',
'employees': 3,
etc...
},
'512457300': {
'name':'company name',
'employees': 27,
etc...
} ...
}
查询现在在开发服务器上运行,机械硬盘为7200 rpm。我认为它在ssd磁盘上会更快,但肯定可以提高它的性能吗?
有没有更好的方法来运行查询而不是像这样的循环?
我设法优化查询,解决方案,如果其他人可能发现它有用。我改变了这个集合的结构:
{
{
'name':'company name',
'id': '412412421',
'employees': 3,
etc...
},
{
'name':'company name',
'id': '512457300',
'employees': 27,
etc...
} ...
}
然后我为id添加了索引:
db.collection.create_index([('id', pymongo.DESCENDING)])
最后我将查询更改为find而不是find_one
query = db.collection.find({'id':{'$in':id_list }, 'employees': {'$gt': 2}}, {'_id': False})
for q in query:
result.append(q)
现在运行这需要0.3秒。