我有一個與使用JPA的SQL查詢性能相關的問題。Hibernate,用參數查詢SQL。性能不佳
響應時間:
- 使用蟾蜍 - 200毫秒
- 內使用Glassfish的2.1,Java 1.5中我的項目,休眠3.4.0.ga - 27號
Oracle 10g
玻璃魚和蟾蜍在同一臺機器上託管。我已經連接到來自相同Glassfish,JPA等的其他ddbb,並且性能很好。所以我不知道發生了什麼。
我有兩個不同的環境。在其中一個(理論上最糟糕的是)它運行得很快。另一方面,這是我遇到問題的地方。
該查詢是通過Javax.persistence.Query對象執行的,並且在此對象中插入參數的方法爲setParameter()。之後,我調用getResultList()方法,並且此方法將寄存器返回給我。在這一點上是時間過度的地方。
但是,如果我替換代碼中的參數,並且直接調用getResultList()方法,而無需將參數設置爲Query對象,則性能會更好。
任何人都可以幫助我解決問題或如何追蹤它?
查詢
SELECT A, B, ..., DATE_FIELD FROM
(SELECT A, B, C FROM Table1
WHERE REGEXP_LIKE(A, NVL(UPPER(:A),'')) AND DATE_FIELD = :DATE
UNION
SELECT A, B, C FROM Table2
WHERE REGEXP_LIKE(A, NVL(UPPER(:A),'')) AND DATE_FIELD = :DATE)
Java代碼的
public Query generateQuerySQL(String stringQuery, HashMap<String, Object> hParams) {
Query query = em.createNativeQuery(stringQuery);
if (hParams != null) {
for (Iterator<String> paramNameList = hParams.keySet().iterator(); paramNameList.hasNext() {
String name = paramNameList.next();
Object value = hParams.get(name);
query.setParameter(name, value);
}
}
return query;
}
唯一可能性是數據集或查詢緩存配置中的數據庫的大小。 – Phani
請顯示真實的代碼示例。實體,JPA查詢,e.t.c. – Taky
@Taky,現在你可以看到查詢和Java代碼。 –