使用准备好的语句的理由有两个:
但是JDBC中的准备语句与连接绑定在一起。我们应该使用连接池。这意味着在一个典型的代码示例中,我必须
在使用JdbcConnectionPool ( H2附带的简单连接池)时,我认为语句没有缓存。这是否意味着在使用预先准备的语句时会对性能产生相当负面的影响--由于上文(1)的原因,这一点我无法避免。
发布于 2014-12-22 09:54:42
H2缓存在连接级别透明地准备了语句。这意味着,只要SQL字符串在创建准备好的语句时是相同的,并且使用的是相同的连接,它就不会被重新解析,而只是作为缓存查找的不透明字符串进行比较(请参见org.h2.jdbc.JdbcConnection#prepareCommand(...))。
可以使用参数QUERY_CACHE_SIZE-more info 这里配置查询缓存大小。
根据您的使用场景,您可能希望尝试完全不使用连接池。例如,作为嵌入式数据库,连接成本并不高。如果只使用单个连接(缓存次数越多;内存消耗越低,因为不重复缓存),您可能会获得更高的性能。而且,H2的许多部分(AFAIK)并不是真正为并发构建的。
因此,要回答你的问题:
不,我不认为这本身对准备好的陈述表现有负面影响。恰恰相反。
然而,想想你想要使用什么样的池,以及你希望它有多大。另外,您期望什么样的并发性?然后,在您期望在实际应用程序中看到的场景中,测量速度和内存消耗。还有..。考虑一下这对您的应用程序到底有多重要。我想其他地方可能还有更大的鱼要炸掉。
https://stackoverflow.com/questions/27598390
复制相似问题