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など。

*2Class::DBI::Pagerはcountする分重い。