JPA Query - Verbesserungsvorschlag

t.stein

Mitglied
Hallo Zusammen,

ich habe folgendes JPA Query zusammen gebaut:

Java:
SELECT c FROM CommunicationsLog c WHERE c.client LIKE :railexpression AND c.sender LIKE :searchquery"
+ " OR c.receiver LIKE :searchquery OR c.messageid LIKE :searchquery OR c.state LIKE :searchquery"
+ " OR c.messagetype LIKE :searchquery OR c.timestamp LIKE :searchquery"

Gibt es Möglichkeiten die Performance durch einen anderen Ausdruck oder vielleicht einer anderen Technologie z.B. "Criteria-API" zu verbessern?

gruß und danke
 
Das ist zu bezweifeln. Das erzeugte SQL wird ebenfalls viele LIKE-Ausdrücke enthalten und die sind immer recht langsam, da die Datenbank keinerlei Nutzen aus Indizes ziehen kann.
 
Abhilfe kann hier nur das nutzen einer Funktion die durch das RDBMS vorgegeben wird z.b. für MySQL:

MySQL :: MySQL 5.0 Reference Manual :: 11.9 Full-Text Search Functions

Mit setzen eines Fulltext-Index kannst du eine "Like" suche über mehrere Spalten erzeugen. Damit verlierst du zwar die Unabhängigkeit zum RDBMS aber hättest auf jedenfall eine bessere Performane! Eine Lösung durch eine java basierende Lösung wirst du kaum finden

Greetz
 
Das ist zu bezweifeln. Das erzeugte SQL wird ebenfalls viele LIKE-Ausdrücke enthalten und die sind immer recht langsam, da die Datenbank keinerlei Nutzen aus Indizes ziehen kann.

Natürlich kann man Indizes bei Likesuchen ausnutzen. Es geht nur dann nicht mehr, wenn das erste Zeichen ein Wildcard ist.
 

Neue Themen


Zurück
Oben