声明的成本是多少

时间:2012-06-11 09:27:00

标签: java sql jdbc

如果我一次只使用一个Statement,那么将它与我的Connection一起缓存是值得的。我已经缓存了连接,所以我几乎可以免费缓存语句。

基本上我想我是在询问创建语句是否有任何成本/开销。我完全理解创建预准备语句的好处。我在这里专门讨论Connection.createStatement()

2 个答案:

答案 0 :(得分:4)

声明的成本无法与其他因素无关地量化;例如数据库,JDBC驱动程序,语句中的SQL等。

您可以确定创建Statement(或PreparedStatement)并在第一次执行时会产生开销。但是,它很可能不会对整个应用程序的性能产生重大影响。如果不是这样,那么实现缓存代码将只是浪费精力。

你不应该猜测这是否(或不是)值得进行优化。你应该做什么让你的程序运行,然后分析它,然后使用分析数据来确定需要优化的内容。如果花费大量时间执行相同的查询,那么可能缓存将有所帮助,也许不会。尝试一下,看看它是否会对性能产生显着影响。

答案 1 :(得分:0)

对开源jdbc驱动程序(jtds)的一些研究表明,每个Statement创建的对象开销都是如此。我试图计算每次想要查询数据库时创建新Statement的成本,而不是保留一个缓存的并重新使用它:

  1. A Connection - 大概是缓存得那么微不足道。
  2. A TdsCore - 看起来像协议实现,但它的缓存非常小。
  3. A ResultSet
  4. ArrayList批量商品。
  5. 开放ArrayList的{​​{1}}。
  6. 列元数据。
  7. 因此看起来ResultSet的成本中最高比例涉及任何已运行的查询所留下的内容。