【发布时间】:2014-11-10 23:42:37
【问题描述】:
我在提高 Rails 中 rest api 的性能方面付出了很多努力。目前,rest API 需要 10 秒来获取 25000 条记录,其中每条记录的大小为 1 kb。
我正在努力通过优化查询、应用索引等来减少它。但目前没有任何效果。我是数据库新手,可能会错过一些愚蠢的观点。我想将时间减少到 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
这是 sn-p 但与主模式非常相似。
我正在使用这个查询来访问记录,它需要
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)
结果为@987654323@ 我只是不明白为什么要花这么多时间,任何改进任何查询或任何其他点的建议
谢谢
【问题讨论】:
标签: mysql ruby-on-rails database activerecord