如果用户模型包含多表并使用map,它真的会变慢!!它可能是大约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索引。
还是不知道是什么问题。
有人可以请帮助我或分享我如何加快速度吗?
使用 .pluck(:id)
代替.map(&:id)
这会更快。