【问题标题】:Hibernate fetching quick if setMaxResults is set如果设置了 setMaxResults,则休眠快速获取
【发布时间】:2015-02-10 14:02:41
【问题描述】:

有一个简单的 sql 查询,它只获取 ONE 记录。数据库是oracle。

下面是简单的查询:

select *
from APPEALCASE appealcase0_
where appealcase0_.caseNumber='BAXXXXX00' and appealcase0_.DELETED_FLAG='N' 

当我使用休眠获取这一行时,响应时间为500ms,这很慢,因为它必须非常快并且不超过 10 毫秒。但是当我将休眠查询对象中的MaxResults 设置为 1(one) 时,响应时间提高到了 15 毫秒。 虽然我的问题得到了解决,但我仍然对将 MaxResults 设置为 1 如何大幅改善响应时间感到困惑。谁能给我解释一下?

【问题讨论】:

  • 只有在使用 Hibernate 时才可以看到缓慢的响应时间——或者当从 SQL*Plus 发出相同的查询时也会出现这种情况?
  • 只有在查询通过 jdbc 连接运行时才会发生。

标签: oracle performance hibernate fetch


【解决方案1】:

嗯,这对我来说很合乎逻辑。由于您告诉 Oracle 最多检索一条记录,因此它会在找到一条记录后立即停止搜索。而如果您不这样做,它会扫描整个表(或索引)以查找与搜索条件匹配的所有记录。

不过,您应该检查的是您是否在 caseNumber 列上定义了索引。

【讨论】:

  • 是的,我确实在列上有一个索引,即使在此之后,我也需要将 MaxResults 设置为 1 以获得良好的响应。我想 query.FetchSize 为 1 应该提高了性能,而不是 MaxResults api 做了魔法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多