Class::DBI と DBIx::Class のパフォーマンス比較。
最初は join の扱いを調べるために始めたのだけど、DBIx はパフォーマンスに気を遣って実装されているようなので、単純に速度を比べてみる。
とあるアプリケーションで作った、tag のテーブル。データ件数1000件ほどを、search / retrieve_all で全件とってくるだけのもの。
実行結果。
Using Class::DBI time: 168.596 msec.
Using DBIx::Class time: 71.917 msec.
とってくる件数を変えてみたりした結果、データ件数が少ない場合にはほとんど差がないが、多いと差が開く傾向。
DBICのほうが効率がよいのかね。
ただし。Class::DBI と互換性を持たせてくれる DBIx::Class::CDBICompat を使用すると、CDBI よりも遅くなるので注意。
Using DBIx::Class::CDBICompat time: 421.85 msec.
あと、DBIC は最初の DB接続時になにやらシステムカタログ(Pgの場合)にアクセスしている。これを頻繁にやられるとちょっと……とも思ったが、2回目以降はやらないようなので、まあいいか。