※ちょっと勘違いしてました。修正してます。
iioka@この辺はフレームワークで対応すべきだと思ってます
です。
以前、このブログで「PreparedStatementは速い!」というエントリーを書きました。
その話のきっかけは、Java日本ユーザー会の結成総会に行ったからなのですが、
そのときの資料(PDF)が公開されています。
資料は細川努氏の「Javaとデータベース」のものになります。
PDFによると、INSERTでは明らかに速かったPreparedStatementも、
SELECTではあまり高速化が図れないそうです。
(※「あまり」というのは、INSERTの時のデータに比べて、という意味です)
今まで何でもPreparedStatementでやっていましたが、
発行するクエリーに応じて使い分けるのがベターですね。
(※PreparedStatementのままで大丈夫でした。)
※データはあくまで細川氏の環境によるものなので、全ての環境で同じ結果を出すとは限りません。
資料では他にもJDBCやデータアクセスの方法などが紹介されています。
興味のある方はぜひ。




コメント (2)
>INSERTでは明らかに速かったPreparedStatementも、SELECTではあまり高速化が図れないそうです。
資料を拝見しましたが、iiokaさんが誤認されているのではないでしょうか?
データを1000件登録するためには必ずINSERT文を1000回発行しなければならないのに対して、データを1000件取得するためにSELECT文を1000回発行する必要はありません。
資料11ページの「通常」とは「Statement#executeQuery」メソッドを実行した回数、「Prepare」とは「PreparedStatement#executeQuery」メソッドを実行した回数、「Fetch」とは「Statement#executeQuery」メソッドを1回実行して取得したResultSetに対して「next」メソッドを実行した回数だと思います。
そう考えると「Fetch」がダントツに早いのは当たり前で、今までどおり何でもPraparedStatementを使用するのが適切かと思います。
投稿者: k2 | 2007年6月11日 15:04
日時: 2007年6月11日 15:04
>k2
どうもiiokaです。
改めて資料を見直しました。
指摘通り、単純に「SELECT文1000回発行するパフォーマンス」を比較したものだと思ってました。
ご指摘ありがとうございます。
いずれにしても、
PreparedStatementのパフォーマンスがStatementに劣っているわけではないので、
>発行するクエリーに応じて使い分けるのがベターですね。
という言い方はよろしくないですね。
なおしておきます。
投稿者: iioka | 2007年6月12日 13:04
日時: 2007年6月12日 13:04