首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate命名查询重新解析

Hibernate命名查询重新解析
EN

Stack Overflow用户
提问于 2013-05-22 14:11:36
回答 1查看 630关注 0票数 1

我们使用hibernate命名查询,如下所示:

代码语言:javascript
复制
named_query :   Select this_  from  TableA this_  where this_.id  in( select max(id) from TableA where COLA is null group by COLB ) and rownum=1  
Query query = getNamedQuery("nq.select.DirtySubject.onMaxDirtySubjectRecId");
List<SomeObject>  objectList       = query.list();

DBA标记了查询,逐字注释如下

这些表示每次执行时消耗最多解析资源的SQL语句。 本报告中出现的SQL语句可能正在重新分析。应该对过度解析的SQL语句进行优化,以减少其解析频率。这涉及到使用绑定变量和相同的语句语法和大小写,以便能够在SQL缓存中重用以前分析过的任何语句。 检查这些查询,看看是否有任何SQL优化是可能的和合理的。

其他重要事实:此查询是轮询逻辑的一部分,并被反复触发。

数据库:Oracle 11G

技术栈: Java,Hibernate,Tomcat,Linux,Oracle 11G

问题:

1:场景后面- Hibernate将使用准备好的语句-对吗?

他说:我们可以从应用程序方面做更多的事情--避免重新解析这个查询?

他说:我们可以在数据库服务器上做些什么来避免重新解析?

EN

回答 1

Stack Overflow用户

发布于 2013-05-22 14:40:59

注释谈到了解析资源(与执行时间/资源相反),但是语句本身看起来并不难解析。最有趣的信息将是执行计划。我假设查询总是相同的(但注释中包含“可能”一词)。

关于问题1:

如果您想确保准备好的语句确实有帮助,可以尝试在没有Hibernate的情况下运行相同的查询--只是普通的java.sql、PreparedStatement。

如果是这样的话,就有一个Hibernate准备的语句缓存,但我从未使用过它。

关于问题2:

如果这是您的热点,您可以在Hibernate中使用“直接SQL”(如果它和您的连接池允许缓存准备好的语句),甚至没有它:那么您可以完全控制。

至于问题3:看看Oracle11g结果缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16694065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档