我在has_and_belong_to_many
和Talk
之间存在RatingQuestion
关系。我想一次在数百条记录上添加(或删除)关系。
我正在使用for
循环,但需要一些时间,因为可能会有数千次谈话。知道如何改进下面的代码吗?
rq = RatingQuestion.find(rating_question_id)
talks.each do |talk|
talk.rating_questions << rq unless talk.rating_questions.include?(rq)
end
答案 0 :(得分:1)
您应该将长时间运行的任务移动到后台作业队列中。数据库写入通常非常昂贵,因此当您进入上述数千个关联时,您的请求很可能会超时。
您可以通过批量插入来提高性能,这会将所有插入内容聚合到对数据库的较大INSERT
调用中。
然而,这是一个很好的指标,表明你的应用程序结构很糟糕。 所有这些记录必须存在于数据库中吗?它们是否可以在被回答或操纵时创建,而不是全部预先创建?