2012-01-23 164 views
0

針對我正在開發的應用程序我必須生成綜合報告,其中應用程序必須讀取數據量非常大的數據,並且數據庫中的記錄數量超過100,000條。我們發現使用grails/hibernate(我們在整個應用程序中使用的是事實上的ORM)效果不佳。在某些情況下,即使查詢結果集小到10,000條記錄,它也需要1.3+秒。想知道是否有任何調整我缺少或如果它更好地移動到本地SQL的這種要求。grails性能優化

只要提及表非常簡單,並且沒有連接。我更喜歡用Hibernate作爲標準來過濾數據的唯一原因是非常動態的,並且產生了多個可選列。

回答

2

您是否正在查詢數據庫以將100,000條記錄帶到中間層,以便您可以對該報告進行計算?如果答案是肯定的,我會考慮爲該報告存儲過程或視圖,以便您可以在數據庫服務器上執行計算,並在生成報告時減少數據量和處理量。

檢查您的模式以確保您在WHERE子句中的所有列上都有索引,包括外鍵。從Hibernate獲取生成的SQL並解釋計劃以查看時間花在哪裏。

這是人們在Hibernate中遇到的一個問題:生成的SQL性能不夠好時該怎麼辦。如果Hibernate無法完成這項工作,你可能不得不求助於其他的東西,比如直接JDBC或者iBatis。

+0

使用hibernate可以限制列名嗎?即,而不是返回所有列,我認爲如果我減少可能有助於性能的數據回合 – Amit

+0

您可以使用HQL,但問題是它仍然會引用您的ORM映射。 – duffymo