2017-08-13 1 views
0

entityManager.createNativeQuery(sqlQuery).getResultList()を使用して実行する複数のクエリは、実行に数十秒(数分間)かかる。私は、Hibernateのロギングを有効にし、同じデータベースに接続するIntelliJで同じSQLクエリを実行しました。クエリは10ミリ秒未満で返されました。Springブート/ Hibernateのネイティブクエリは、外部よりも実行速度がはるかに遅い

データベースにH2が組み込まれているため、データベースドライバは同じです。クエリにはパラメータが含まれていないため(thisは排除されます)彼らは整数(IDとカウント)のみを返します。 2回連続してクエリを実行すると、2番目のクエリはほぼ即時に戻ります。クエリの実行時間は、JVMに128Mまたは2048Mを割り当てるかどうかにかかわらず同じです。

クエリが複雑すぎるとは限りません。私が気づいた唯一の事は、それらの中には、私が参加する、あるいは私が比較する内部選択ステートメントがあることです。彼らは私のプログラムから実行されていないときに非常に迅速に実行できるので、彼らは実際の問題ではないと思います。

残りのプログラムはうまく動作し、他のクエリは高速に実行されます。

これは、例えばクエリです:

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

10行の整数だけを引っ張ってしまうとどうなるのですか? – Pragmatick

+0

あなたは10行だけフォームデータベースを取得することを確かめますか? –

関連する問題