我们使用休眠命名查询如下:
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 将使用 Prepared 语句 - 正确吗?
2:我们可以从应用程序方面做更多的事情 - 以避免重新解析此查询?
3:我们可以在数据库服务器上做些什么来避免重新解析?