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が無くなったのが要因かにゃ。
コメントする