アプリ版:「スタンプのみでお礼する」機能のリリースについて

PreparedStatement と Statement について教えてください。

PreparedStatement は、
「実行環境にもよるが、Statement より、処理速度が40%~50%ほど短縮される」という記述があったのですが、その逆のケースはありませんでしょうか?

[参考URL]
 http://el.itlab-school.jp/index.cgi/javamysql

Statement の処理が、
PreparedStatement より、早くなる、そんな状況はないでしょうか?

また、Statementより、
PreparedStatement方が、基本的にはの方が処理が早いという特徴から、気になるところがあるのですが

実際のWebアプリケーションを作成のときは、
レスポンス速度も考慮し「PreparedStatementにてSQL文を発行するべきでしょうか?」(例え、"?"を使用することがなかったとしても)

PreparedStatementを使用せずに、
Statementを使用した方がいい場合、という状況はあるのでしょうか?

A 回答 (1件)

PreparedStatement を使用しても、速度が改善される場合はあまりありません。



ほとんどの場合、Statement と、PreparedStatement は、同じ位の速度です。

場合によっては、PreparedStatement の方が、画期的に速い場合もあります。

●Statement が有効な場合
Statement を使用する時の多くは、例えば、固定の SQL 文字列を DAO から
実行する時。には、Statement を使用する事もあります。
Statement を使用して、固定の SQL 文を短い時間に、複数回実行した場合、RDBMS 内で、SQL 実行計画をリサイクルしてくれるかもしれないと期待できます。

また、PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合。
同じ SQL が短い時間内に生成される可能性が低く、加えて、SQL 文が複雑な場合、PreparedStatement が有効に活用できないでしょう。
この場合、SQL インジェクション対策はPreparedStatementを使用する場合と同じではないと思いますので、注意が必要かと思います。

●PreparedStatement が有効な場合
同じ SQL で ? の部分のみ入れ替えて、PreparedStatement のインスタンスを連続して使用する場合。
連続して、同じ PreparedStatement を実行した場合、処理速度が速くなる事が期待できます。

SQL インジェクション対策をする場合。
SQL インジェクション対策をする場合、Statement を使用するよりも、PreparedStatement を使用する方が容易であると思われます。

この回答への補足

すみません

「プリペアードステートメントを使いすぎている」という状況なのでしょうか?×

「“?”を使いすぎている」という状況なのでしょうか? ○

です。

補足日時:2009/06/28 20:27
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
お礼がおそくなって申し訳ありません。

「PreparedStatement」が早くなるものだと思っていたのですが、
Statement と、PreparedStatement は、同じ位の速度って余り違いがないものだったのですね^^;

>PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合

すみません、理解が及ばすにイメージができなかったのですが、
「PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合」というのはどのような状態なのでしょうか?

「プリペアードステートメントを使いすぎている」という状況なのでしょうか?

SQLインジェクションについては
まだ余り理解できていないので調べてみます。

お礼日時:2009/06/28 20:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!