CDBI vs DBIC

Class::DBIDBIx::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回目以降はやらないようなので、まあいいか。