gpt4 book ai didi

mysql - 设计 Rails 中的优化查询

转载 作者:行者123 更新时间:2023-11-29 12:35:26 25 4
gpt4 key购买 nike

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

这是片段,但与主架构非常相似。

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

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)

结果是在 8713 毫秒内完成 200 项(查看次数:4.8 毫秒 | ActiveRecord:827.8 毫秒)
我只是不明白为什么要花这么多时间,有什么建议可以改进任何查询或任何其他点

谢谢

最佳答案

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

  • 为结果添加分页功能,这样您就无需查询数据库中的所有记录并将它们映射到 ActiveRecord 中的对象
  • 检查您是否正在处理 N+1 查询,请查看 bullet寻找线索
  • 简化查询:有时只有一个复杂查询无助于解决性能问题
  • 仅选择您需要的字段,请查看 pluck method

关于mysql - 设计 Rails 中的优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com