为什么第一个HQL查询比其他查询花费的时间更长?

时间:2012-05-15 14:11:31

标签: java mysql hibernate hql

我正在对JDBC和Hibernate(带JPA)性能进行基准测试,并连续多次运行相同的查询。我注意到第一个查询(使用JDBC和Hibernate)比其他查询运行的时间更长。

我已经禁用了mysql缓存,所以我相信它不应该是特定于mysql的。可能吗? 我还清除了每个(HQL)查询之间的EntityManager。

有人能指出为什么第一个查询需要的时间比其他查询要长吗?

记录:http://pastebin.com/fwNbqaMD

感谢您的回复

2 个答案:

答案 0 :(得分:1)

我猜是因为你的程序运行时优化了。

在每次运行期间,都会收集代码的分析信息,JIT优化器会应用优化。

答案 1 :(得分:1)

以下几种可能的原因。

  1. 连接池。
  2. 准备好的陈述。
  3. 数据库引擎预热/初始化。
  4. 在任何一种情况下,第一次迭代都会比休息更多。

    例如,对于预准备语句,查询计划是第一次构建的,并在后续执行中进行缓存以便重用。