如果用户模型包含多个表并使用地图,它会真的慢! 它可能是大约11s~20s。
在控制台中我看了日志打印,当sql包含时它总是很慢,打印出来后sql查询日志完成后它会很快运行。
此功能仅用于将数据导出为excel,因此很少使用导致我不想在这种情况下使用计数器缓存。
Benchmark.bm do |x|
x.report {
User.includes(:active_goal, :notification_setting, :reviews,
:comments, :answers, :quiz_answers).map(&:id) do |user|
[
user.active_goal.try(:name),
user.notification_setting&.is_need_notify || false,
user.reviews.size,
user.comments.size,
assignment_reviews(user.answers),
right_ratio(user.quiz_answers)
]
end
}
x.report {
User.includes(:active_goal, :notification_setting, :reviews,
:comments, :answers, :quiz_answers)
}
end
Benchmark::Tms: @real=14.244344999955501, @stime=0.45999999999999996, @total=13.05, @utime=12.59
Benchmark::Tms: @real=0.00010500004282221198, @stime=0.0, @total=0.0, @utime=0.0
@users.size = 887
QuizAnswer.all.size = 71386
Goal.all.size = 1519
NotificationSetting.all.size = 928
Review.all.size = 10
Comment.all.size = 6664
Answer.all.size = 98
Ruby 2.4.1p111
顺便说一句,这些表我已经在id上做了索引。
仍然不知道它是什么问题。
有人可以帮助我或分享我如何加快速度?
答案 0 :(得分:-1)
使用.pluck(:id)
代替.map(&:id)
这会更快。