2017-08-13 30 views
0

我有多個查詢,我使用entityManager.createNativeQuery(sqlQuery).getResultList()執行,需要幾十秒(最多幾分鐘)才能執行。我啓用了Hibernate日誌記錄,並在連接到相同數據庫的IntelliJ中執行完全相同的SQL查詢。查詢返回的時間少於10毫秒。在Spring Boot/Hibernate中的原生查詢比在外部執行要慢得多

數據庫嵌入H2,數據庫驅動程序是一樣的。查詢不包含任何參數(這會消除this)。它們只返回整數(ID和計數)。如果我連續執行兩次查詢,則第二個查詢將幾乎立即返回。無論我將128M還是2048M分配給JVM,查詢執行時間都是相同的。

查詢看起來不太複雜。我唯一注意到的是,他們中的一些人擁有我加入的內部選擇陳述或我與之比較的內部選擇陳述。我想他們不是真正的問題,因爲他們可以很快執行,而不是從我的程序執行。

該程序的其餘部分工作得很好,還有其他查詢運行速度快。

這是一個例子查詢:

SELECT 
    USER_ID, 
    count(result) AS count 
FROM USERAPIACCESS 
WHERE USER_ID IN (123) 
     AND RESULT IN ('SUCCESSFUL') 
GROUP BY USER_ID, RESULT 
ORDER BY USER_ID, RESULT 

回答

0

多少條記錄在這個表? 我認爲問題是你沒有在這裏分頁,應用程序去獲取此表中存在的所有記錄

+0

夫婦一萬。如果只有十行整數被拉動,爲什麼會這麼重要? – Pragmatick

+0

你確定只有十行提取表單數據庫? –

相關問題