我正在努力提高rails中rest api的性能。目前,rest API需要10秒来获取25000条记录,其中每条记录的大小为1kb。
我真的很努力地通过优化查询,应用索引等方式来减少它,但现在什么都不起作用。我是数据库的新手,可能会遗漏一些愚蠢的东西。我想把时间缩短到1-2秒。
下面是我的模式文件,通过数据库结构提供一些概念
create_table "records", force: true do |t|
t.datetime "start"
t.datetime "end"
t.datetime "current"
t.integer "user_id"
t.integer "device_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "records", ["device_id"], name: "index_records_on_device_id", using: :btree
add_index "records", ["user_id"], name: "index_records_on_user_id", using: :btree
create_table "record_student", force: true do |t|
t.string "class_id"
t.string "c_admin"
t.string "Branch"
t.integer "system_id"
t.integer "asu"
t.decimal "d_code", precision: 10, scale: 0
t.integer "c_code"
t.integer "marks"
t.string "stype"
t.integer "record_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "record_student", ["record_id"], name: "index_record_student_on_record_id", using: :btree
create_table "record_emp", force: true do |t|
t.string "class_id"
t.string "c_admin"
t.string "Dept_name"
t.integer "temp_id"
t.integer "system_id"
t.integer "asu"
t.decimal "d_code", precision: 10, scale: 0
t.integer "c_code"
t.integer "marks"
t.string "stype"
t.integer "record_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "record_emp", ["record_id"], name: "index_record_emp_on_record_id", using: :btree
create_table "record_other", force: true do |t|
t.integer "d_code"
t.integer "c_code"
t.integer "code"
t.decimal "marks", precision: 10, scale: 0
t.string "stype"
t.integer "record_id"
t.datetime "created_at"
t.datetime "updated_at"
end这是代码片段,但与主模式非常相似。
我正在使用这个查询来访问记录,它需要
Records.owned_by(User.find_by_email(params[:user].to_s).id).where(device_id: params[:did]).includes(:record_students, :record_employees, :record_admins, :record_others)结果是Completed 200 OK in 8713ms (Views: 4.8ms | ActiveRecord: 827.8ms)我只是不明白为什么它花了这么多时间,任何建议,以改善任何查询或任何其他点
谢谢
https://stackoverflow.com/questions/26855089
复制相似问题