2017-06-16 2 views
0

Derzeit habe ich eine Implementierung, die 10 tausend Datensätze mit 10-12 Sekunden abruft. Die Leistung dieser Abfrage kann verbessert werden und wie? Im Anschluss an mein Code-Schnipsel basiert auf QueryDSL und JPA 2.Wie können Tausende von Datenbankeinträgen mithilfe von JPA 2 und QueryDSL effizient abgerufen werden?

public List<EntryEntity> getEntries() { 

QEntryEntity qEntryEntity = QEntryEntity.entryEntity; 

return queryfactory.selectFrom(qEntryEntity).orderBy(qEntryEntity.name.asc()).fetch(); 
} 
+2

Was hält Sie davon ab, dies mit reinem SQL zu tun? –

+0

Wenn die Order ** orderBy (qEntryEntity.name.asc()) ** von java ausgeführt wird, dauert das Abrufen von Daten aus der lokalen Computerdatenbank etwa 3 Minuten. – Naresh

+0

Ich habe eine bestimmte Anforderung von meinen Senioren, dies in QueryDSL und JPA zu tun, ohne native Abfragen zu verwenden. – Naresh

Antwort

3

sind Sie vermutlich ein Index für diese NAME Spalte fehlt:

CREATE INDEX solve_all_problems ON entry_entity (name); 

Das funktioniert gut, weil ein Index Vorbestellungen alle Ihre Daten Da es sich um eine geordnete Datenstruktur handelt, muss die Datenbank beim Ausführen einer Abfrage, wie sie gerade ausgeführt wird, keine Bestellarbeit mehr ausführen. Use-the-index-luke has a nice explanation on this topic.

Seitliche Anmerkung: Seien Sie vorsichtig beim Hinzufügen von Indizes. Während sie die Leseoperationen drastisch beschleunigen, wird jeder Index die Schreiboperationen für diese Spalte verlangsamen. Jeder Index ist ein Kompromiss.

Verwandte Themen