2016-11-04 11 views
0

私はJpaを初めて使用しています。私は約10000から50000のクライアントオブジェクトをリストリストがあります。Spring Boot JPAクエリを最適化する

List<TransactRepViewModel> temporalList = transactRepViewRepository 
     .findByClientIdAndClDateBetween(clieTabModel.getClientId(), 
       reportInterval.getStartDate(), 
       reportInterval.getEndDate()); 

TransactRepViewRepository.class方法は次のようになります:彼はこのような任意の購入をした場合

私はこのリストを反復処理し、各クライアントを照会しています

List<TransactRepViewModel> findByClientIdAndClDateBetween(
     String clientId, Date startDate, Date endDate) throws DataAccessException; 

私は希望このようなクライアントの量を繰り返し処理するにはかなりの時間がかかるため、検索時間を改善することが本当に好きです。私が使用できる技術はありますか?

+0

"findAll"クエリを作成しますか? –

+0

あなたは精巧にできますか? –

+1

JPAリポジトリに新しいメソッドを作成します。このメソッドはfindAllByStartDateEndDateのようになります。このリンクは役立つかもしれません:http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html –

答えて

3

それはあなたが何をしようとしているかについてより多くを知らなくても、具体的な勧告を行うことは困難ですが、一般的に:たとえば、リポジトリメソッドを作成し、

  • 一つの大きなクエリを実行し、その結果、 すべてあなたが興味のある日付の間に購入し、結果にクライアントIDが含まれていることを確認してください。その後、結果を取得した後にJavaコードでクライアントと結果を一致させます。これにより、何千ものデータベースクエリを実行するオーバーヘッドを回避できます。顧客IDと購入日を「注文する」ことができます。

  • 関連する表に適切な索引があることを確認し、jpaがその問合せを実行するときにデータベースが索引を使用することを確認します。テーブルスキャンはおそらくパフォーマンスを低下させます。