每个连接缓存PreparedStatement还是让连接池处理它?

时间:2011-01-19 16:16:48

标签: jdbc prepared-statement connection-pooling

哪种缓存策略更快,速度更快?

1)PreparedStatement池(通过连接池)。没有缓存应用程序。

for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}

2)应用程序级缓存。没有PreparedStatement汇集。

PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();

这个问题类似于Reusing a PreparedStatement multiple times,除了我期待具体的基准测试结果以及考虑PreparedStatement汇集。

http://drupal.org/node/550124#comment-2224630似乎表明应用程序级缓存比PreparedStatement池更有效,但差异可以忽略不计。我想在做出决定之前看到更多的基准测试。

1 个答案:

答案 0 :(得分:0)

应用程序级缓存将更加有效,特别是如果您批处理那些执行。

即使使用连接池,每次准备好连接(后座和第四个后座)并关闭时所花费的网络开销也不仅使其变慢,而且增加了SQL Server和客户端服务器上的CPU级别成本