- ベストアンサー
PreparedStatementとStatementについて
- PreparedStatementとStatementについて教えてください。
- PreparedStatementは処理速度が40%~50%ほど短縮されるが、その逆のケースはあるのか。
- Webアプリケーションを作成する際はレスポンス速度も考慮し、PreparedStatementにてSQL文を発行すべきか。
- みんなの回答 (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 を使用する方が容易であると思われます。
お礼
どうもありがとうございます。 お礼がおそくなって申し訳ありません。 「PreparedStatement」が早くなるものだと思っていたのですが、 Statement と、PreparedStatement は、同じ位の速度って余り違いがないものだったのですね^^; >PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合 すみません、理解が及ばすにイメージができなかったのですが、 「PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合」というのはどのような状態なのでしょうか? 「プリペアードステートメントを使いすぎている」という状況なのでしょうか? SQLインジェクションについては まだ余り理解できていないので調べてみます。
補足
すみません 「プリペアードステートメントを使いすぎている」という状況なのでしょうか?× 「“?”を使いすぎている」という状況なのでしょうか? ○ です。