ads*_*bum 12 java mysql hibernate jdbc c3p0
我正在使用例如c3p0,其中一些已定义的"maxStatements"用于prepareStatement缓存.这个缓存真正做了什么?它缓存了什么样的数据.在什么级别(db,application,..)?从例子中理解它会很好.例如,我有一个查询
select some from sometable where somecolumn =?
现在我将它发送到未缓存的预准备语句中.现在我发送它并且它被缓存了.有什么区别.第一种情况和第二种情况发生了什么.在第一种情况下和第二种情况下发送到DB服务器的是什么?
谢谢.
Joh*_*tts 11
如果没有缓存,每次从Connection请求时都会得到一个新的PreparedStatement.通过缓存,如果提供相同的SQL字符串,您将经常获得与PreparedStatement类型完全相同的Java对象.如果为PreparedStatement提供相同的SQL,即使使用不同的参数,数据库通常也可以重用执行计划等信息,但前提是您继续使用相同的PreparedStatement.通过不要求您的应用程序保留PreparedStatement引用本身,缓存使这变得更容易.
John Watts的回答非常好.
请注意,没有可以提供的示例代码,因为语句缓存是透明的:使用它的代码看起来就像没有代码的代码.您只需在c3p0中打开语句缓存,方法是将maxStatements和/或maxStatementsPerConnection设置为正值.
语句缓存的任何性能优势都依赖于数据库/ JDBC驱动程序.要查看语句缓存是否有帮助,请尝试首先使用语句缓存关闭应用程序,然后将maxStatementsPerConnection设置为应用程序重复使用的预准备语句查询数.对于某些应用程序/数据库/驱动程序,您将看到一个重要的好处.对于其他人,您不会看到任何实质性的好处.
| 归档时间: |
|
| 查看次数: |
8451 次 |
| 最近记录: |