DBICというか DBIx::Class ですが、0.8から新しく入ったDBIx::Class::ResultClass::HashRefInflator でも使うかなと思ってたところ ちょこっと弄ったら、全然不要でした。
# # 0.2 sec # $result_rs->search({id => \@ids})->update({folder_id=>$folder_id}); # # 6 sec # for my $id (@ids) { # my $result = $result_rs->find({id=>$id}) || die; # $result->set_from_related('folder', $folder); # $result->update; # } # # 6 sec # for my $id (@ids) { # my $result = $result_rs->find({id=>$id}) || die; # $result->set_column( folder_id => $folder_id ); # $result->update; # }
@idsは200個ぐらい。 resultはfolderに属している(belongs_to)です。
計測はiTunes再生しながら Benchmark::Stopwatch しましたので不正確ですケド・・・
発行されるSQL文の低減とinflate_resultが無くなったのが要因かにゃ。