我們使用Hibernate命名查詢,如下所示:Hibernate的命名查詢重新解析
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和甲骨文11G
問題:
1:scene- Hibernate的背後將是使用預處理語句 - 是否正確?
2:我們可以從應用程序端做更多的事情 - 避免重新解析這個查詢?
3:我們可以在數據庫服務器上做什麼來避免重新解析?