Class::DBI::Plugin::IteratorのTips
Class::DBI::Plugin::IteratorのTips
簡単にベンチマークをとったところ、search等*1でマッチした件数に対して実際に使うのが半分以下で、sliceすればほぼ確実にパフォーマンスが上がるみたいです。逆にnext等を使うとかなりパフォーマンスが落ちます。
ということで、Class::DBI::Pagerは内部でsliceを使っているので、一緒に使うといいでしょう。
package Films::FavoriteFilms; use base 'Class::DBI::mysql'; use Class::DBI::Plugin::Iterator; use Class::DBI::Pager; __PACKAGE__->connection($dsn, $username, $password, $options); __PACKAGE__->set_up_table('favorite_films'); package main; my @data = Films::FavoriteFilms->pager(10, 1)->retrieve_all;
みたいな感じ。というか、Class::DBI::Pagerを使っているなら一緒にClass::DBI::Plugin::Iteratorを使うのがオススメ。
Class::DBI::Plugin::Pagerと違って既存のコードを書き換えなくて済むし、他のPluginも使えるのがポイント。
もちろんClass::DBI::Pagerを介さずに
package main; my @data = Films::FavoriteFilms->retrieve_all->slice(0, 9);
としたほうが軽いです*2。
*1:retrieve_allやsearch_whereなど。
*2:Class::DBI::Pagerはcountする分重い。