我在rails runner文件中链接了数以千计的查询。在200万条记录数据库中,使用PostgreSQL每次查询需要8-10秒。
Model.where(name: 'peter').where(is_active: true).where('n1=? OR n2=? OR n3=? OR n4=? OR n5=?', @d01_1, @d01_1, @d01_1, @d01_1, @d01_1).where('n1=? OR n2=? OR n3=? OR n4=? OR n5=?', @d01_2, @d01_2, @d01_2, @d01_2, @d01_2).where('n1=? OR n2=? OR n3=? OR n4=? OR n5=?', @d01_3, @d01_3, @d01_3, @d01_3, @d01_3).where('n1=? OR n2=? OR n3=? OR n4=? OR n5=?', @d01_4, @d01_4, @d01_4, @d01_4, @d01_4).update_all(is_active: false)
在此查询中,我在模型属性n1,n2,n3,n4,n5中搜索包含4个数字组合的记录,并更新记录。
此跑步者目前需要3-4天才能完成。 关于如何减少这个时间的任何想法?
编辑: 示例:
@d01_1=1
id:1 (n1:1 n2:2 n3:3 n4:4 n5:5 is_active:true)
id:2 (n1:2 n2:3 n3:1 n4:4 n5:5 is_active:true)
id:3 (n1:10 n2:2 n3:3 n4:1 n5:5 is_active:true)
id:4 (n1:7 n2:2 n3:3 n4:4 n5:1 is_active:true)
id:5 (n1:8 n2:2 n3:3 n4:4 n5:5 is_active:true)
查找某些属性包含@ d01_1"数字1"并更新:is_active => false
表架构:
create_table "modelname", force: :cascade do |t|
t.string "name"
t.integer "n1"
t.integer "n2"
t.integer "n3"
t.integer "n4"
t.integer "n5"
t.integer "n6"
t.integer "n7"
t.integer "n8"
t.integer "n9"
t.integer "n10"
t.integer "n11"
t.integer "n12"
t.integer "n13"
t.integer "n14"
t.integer "n15"
t.boolean "is_active", default: true
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end