2016-11-04 9 views
0

Ich bin neu bei Jpa. Ich habe eine Liste Liste, die etwa 10000-50000 Client-Objekte enthält.Optimierung Spring Boot JPA Abfrage

Ich bin durch diese Liste iterieren und jeder Client-Abfrage, ob er irgendwelche Anschaffungen wie dies gemacht hat:

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

TransactRepViewRepository.class Methode sieht wie folgt aus:

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

würde ich wirklich gerne meine Suchzeit verbessern, da das Durchlaufen einer solchen Anzahl von Clients ziemlich lange dauert. Gibt es irgendeine Technik, die ich verwenden könnte?

+0

Schreiben Sie eine "findAll" Abfrage? –

+0

Können Sie das ausarbeiten? –

+1

Schreiben Sie eine neue Methode in Ihr JPA-Repository. Diese Methode könnte wie folgt aussehen: findAllByStartDateEndDate. Dieser Link könnte helfen: http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html –

Antwort

3

Es ist schwierig, eine konkrete Empfehlung zu machen, ohne viel mehr zu wissen, was Sie zu tun versuchen, aber in der Regel:

  • eine große Abfrage durchführen, so zum Beispiel, erstellen Sie eine Repository-Methode, die Findet alle Käufe zwischen den Daten, die Sie interessiert sind, und stellen Sie sicher, dass das Ergebnis die Client-ID enthält. Passen Sie dann die Ergebnisse mit den Clients in Java-Code an, nachdem Sie die Ergebnisse erhalten haben. Dies vermeidet den Aufwand, potenziell Tausende von Datenbankabfragen durchzuführen. Möglicherweise möchten Sie die Kunden-ID und das Kaufdatum "bestellen".

  • Stellen Sie sicher, dass Sie richtige Indizes für die betroffenen Tabelle (n) haben, und vergewissern Sie sich, dass die Datenbank die Indizes verwendet, wenn jpa ihre Abfrage ausführt. Ein Tabellenscan würde wahrscheinlich die Leistung beeinträchtigen.

Verwandte Themen