Ich habe eine benutzerdefinierte Abfrage in diesen Zeilen. Ich bekomme die Liste der OrderIds von außerhalb. Ich habe die gesamte Bestellobjektliste bei mir, sodass ich die Anfrage bei Bedarf ändern kann.Schnellere/effiziente Alternative zu IN-Klausel in benutzerdefinierten/nativen Abfragen im Frühjahr Daten jpa
@Query("SELECT p FROM Person p INNER JOIN p.orders o WHERE o.orderId in :orderIds)")
public List<Person> findByOrderIds(@Param("orderIds") List<String> orderIds);
Diese Abfrage funktioniert gut, aber manchmal kann es überall zwischen 50 bis 1000 Einträgen in der OrderIDs Liste von außen Funktion gesendet hat. So wird es sehr langsam und dauert 5-6 Sekunden, was nicht schnell genug ist. Meine Frage ist, gibt es einen besseren, schnelleren Weg, dies zu tun? Wenn ich googelte, und auf dieser Website, sehe ich, dass wir ANY, EXISTS: Postgresql: alternative to WHERE IN respective WHERE NOT IN verwenden oder eine temporäre Tabelle erstellen können: https://dba.stackexchange.com/questions/12607/ways-to-speed-up-in-queries-under-postgresql oder verbinden Sie dies mit VALUES-Klausel: Alternative when IN clause is inputed A LOT of values (postgreSQL). Alle diese Antworten sind auf direkte SQL-Aufrufe zugeschnitten, nichts basierend auf JPA. Jedes Keyword wird von Spring-Daten nicht unterstützt. Nicht sicher über das Erstellen von temporären Tabellen in benutzerdefinierten Abfragen. Ich denke ich kann es mit nativen Abfragen machen, habe es aber nicht ausprobiert. Ich benutze Spring-Daten + OpenJPA + PostgresSQL.
Können Sie bitte eine Lösung vorschlagen oder Hinweise geben? Ich entschuldige mich, wenn ich etwas verpasst habe.
Dank,
Alice