如果我一次只使用一个Statement
,是否值得将它与我的Connection
. 我已经缓存了连接,所以我可以几乎不花钱缓存语句。
本质上,我想我是在问创建声明是否有任何成本/开销。我完全理解创建准备好的语句的好处。我Connection.createStatement()
这里专门说一下。
声明的成本不能独立于其他因素来量化;例如数据库、JDBC 驱动程序、语句中的 SQL 等等。
您可以肯定在创建语句(或 PreparedStatement)和第一次执行它时会有开销。但是,它很有可能不会对整个应用程序的性能产生重大影响。如果不是,那么实现缓存代码将只是浪费精力。
您不应该猜测这是否(或不是)将是一个值得的优化。您应该做的是让您的程序正常工作,然后对其进行分析,然后使用分析数据来确定需要优化的内容。如果花费大量时间执行相同的查询,那么缓存可能会有所帮助,也可能不会。尝试一下,看看它是否会对性能产生可衡量的影响。
对开源 jdbc 驱动程序 ( jtds ) 的一些研究表明,创建的每个 Statement 都有以下对象开销。我试图计算Statement
每次我想查询数据库而不是保存一个缓存并重用它时创建一个新数据库的成本:
Connection
- 大概缓存得如此微不足道。TdsCore
- 看起来像一个协议实现,但它被缓存得如此微不足道。ResultSet
。ArrayList
批量项目。ArrayList
开ResultSet
s。因此,看起来Statement
s 成本的最高比例涉及已运行的任何查询留下的内容。