有没有办法优化轨道中100K行的创建?我目前正在使用:
hash_numbers = SomeModel.all.map {|number| {number: number}}
List.last.recipients.create hash_numbers
随着列表变长,指数会逐渐变慢。有什么建议吗?
答案 0 :(得分:2)
您可以尝试其中一种批处理方法find_in_batches
或find_each
,可能仍然是一个漫长的过程,但内存更容易。
或者使用limit
分割查询并将每个组投入到自己的后台进程中的一些方法。
答案 1 :(得分:1)
您是否尝试在事务中包装create
,以便db在单个事务中插入所有查询?可能还有其他更好的解决方案,但是,由于您使用ActiveRecord进行批量插入,请尝试一下:
ActiveRecord::Base.transaction do
1000.times { List.last.recipients.create hash_numbers }
end