rails,有没有办法让rails runner中的查询运行得更快?

时间:2017-08-16 09:33:03

标签: sql ruby-on-rails postgresql

我在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

0 个答案:

没有答案