以前書いた記事で ^のようにlimit offsetを安易にやると辛いみたいな話を書いたけど、じゃあどうすればいいの?っていう部分まで書いてなかったので書きます。(ほとんど教えてもらったことですが!)
実装方法としては常にprimary_keyを条件に指定してあげれば良くて、
my $id = 0; while(1) { my $rs = models("Schema::Hoge")->search({ id => { '>' => $id }, },{ order_by => "id asc", rows => 1000; }); last if $rs->count <= 0; while(my $row = $rs->next) { #何らかの処理 $id = $row->id; ... } }
みたいなコードにすれば1000件の対象が絞れるからrow readsへりますよ。