我有一个大约有7500万条记录的数据库,我的代码遍历所有记录并更新了各种信息。更新信息后,我将flag
字段设置为true
。在脚本末尾,我想将它们全部更新为false
,以便为下一个更新循环做好准备。我在python中执行此操作的代码是:
db.collection.update({'flag':True}, {'$set':{'flag':False}},multi=True)
此方法有效,但速度很慢-每秒大约需要1000-1500次更新,因此更新所有内容要花费数小时。我在flag
字段上有一个索引:
{
"v" : 2,
"key" : {
"flag" : 1
},
"name" : "flag_1",
"ns" : "collection.collection"
}
并确认查询正在使用它:
"planSummary" : "IXSCAN { flag: 1 }",
可以采取什么措施来加快速度?写入原始数据的时间不应超过几分钟。
标志索引的索引大小约为300MB。我不知道这是否全部在RAM中,但是否有足够的空间容纳它。