簡體   English   中英

Hibernate Query在系統中運行緩慢,但在直接運行時運行速度很快

[英]Hibernate Query runs slow in the system, but fast when run directly

我有一個與本周播客相似的問題。

我們有一個使用Hibernate和Sql Server 2005的Java應用程序。

Hibernate正在為我們生成一個查詢,需要將近20分鍾才能完成。

如果我們使用show_sql進行相同的查詢並用常量值替換問號,則會立即返回答案。

我認為我們需要選項(重新編譯),但我無法弄清楚如何使用HQL。

請幫忙!

從你的問題的描述,聽起來你正在遇到參數嗅探。 實質上,SQL Server正在基於傳入的一組較舊的參數值創建查詢計划,這些參數值不會為當前運行的查詢創建有效的執行計划。

通常我通過將參數值傳遞給局部變量並使用我的查詢中的那些或使用OPTION(RECOMPILE)來解決此問題。 但是,由於您使用的是Hibernate,我通常的解決方案不適合您。 據我了解,最好的選擇是使用Hibernate使用prepareStatement()或createSQLQuery()運行本機SQL查詢,遺憾的是,它消除了使用Hibernate的一些好處。

根據我的經驗,Hibernate中復雜查詢的主要問題不是查詢本身,而是創建表示結果集的所有對象。

在我的工作中,我們有一個非常大的域模型,有很多耦合,所以即使從數據庫中取出一個單個對象也是非常昂貴的,因為該對象鏈接到其他對象,而這些對象又鏈接到其他對象和等等。

對我們來說,更多使用延遲加載至少解決了部分問題。 智能緩存幫助更多。 我學到的是,在未來,我將允許域類之間更松散的耦合。

您應該發布您的映射和HQL語句。 如果你在HQL中使用“join”,你可能想看一下Hibernate究竟取得了什么。 可能會發現請求本身很簡單,但Hibernate在獲取數據之前就會獲取大量數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM