2011-06-15 35 views
1

我有一個數據庫表與cca。 327 000個條目。 (SQL Server 2005,Hibernate 3)我必須生成一個查詢此表300次的報表。 HQL查詢看起來是這樣的:Hql查詢優化 - 返回索引ID或整個對象

select hist from HistoryTable hist where year(hist.date) = :year and 
     hist.user.userId = :userId and hist.entryType = :created 

我需要等待3分鐘要生成的報告,所以有沒有辦法來優化這個查詢運行得更快? 我雖然返回hist.id(因爲這是一個主鍵,因此它是索引,我想它是查找更快),而不是整個hist對象,然後通過其id檢索History對象?也許Hibernate做同樣的事情,這是不必要的,然後沒有什麼可做的。有任何想法嗎?

回答

1

我不認爲它會幫助你很多首先檢索主鍵。這隻會增加您需要運行的查詢數量(以及因此花費的時間)。

我寧願看看報告,看看是否可以減少查詢的數量。 此外,我會考慮檢索標量值而不是完整的對象實例,如果你正在處理大量的對象(與從數據庫檢索普通值相比,Hibernate帶來的開銷)。

我還要確保所有的表都被正確地編入索引(測試查詢並查看它們的執行方式)。

0

還要確保你的關聯(例如hist.user,hist.user.somethingElseYetAgain)是懶惰地加載而不是渴望的。否則,您的查詢將加入比實際需要更多的實例,而不是實例化對象代理。

這可以在查詢或映射級別指示。