首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中设计优化查询

在rails中设计优化查询
EN

Stack Overflow用户
提问于 2014-11-11 07:42:37
回答 1查看 39关注 0票数 0

我正在努力提高rails中rest api的性能。目前,rest API需要10秒来获取25000条记录,其中每条记录的大小为1kb。

我真的很努力地通过优化查询,应用索引等方式来减少它,但现在什么都不起作用。我是数据库的新手,可能会遗漏一些愚蠢的东西。我想把时间缩短到1-2秒。

下面是我的模式文件,通过数据库结构提供一些概念

代码语言:javascript
复制
 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

这是代码片段,但与主模式非常相似。

我正在使用这个查询来访问记录,它需要

代码语言:javascript
复制
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)我只是不明白为什么它花了这么多时间,任何建议,以改善任何查询或任何其他点

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-11-12 19:37:15

在一个查询中有25000个结果,这对每个服务器来说都是多余的。在尝试简化查询之前,您应该考虑您的解决方案。以下是一些建议:

  • 将分页添加到结果中,这样您就不需要查询数据库中的所有记录并将它们映射到pluck method

中的对象您不需要处理bullet查询,请查看bullet

  • 简化您的查询:有时只有一个复杂查询不会帮助解决性能问题

  • 只选择您需要的字段,请查看all
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26855089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档