Werken rond de IN
limiet is inefficiënt en JPA is niet altijd de juiste tool voor de klus. Overweeg het volgende:
-
Duizenden gebonden waarden resulteren in potentieel megabytes aan SQL. Het duurt lang om deze SQL naar de database te sturen. Het kan langer duren voordat de database de SQL-tekst leest dan dat deze wordt uitgevoerd volgens Tom's antwoord op de vraag "Limiet en conversie erg lang IN lijst:WHERE x IN ( ,,, ...)" .
-
Het zal inefficiënt zijn vanwege SQL-parsing. Het duurt niet alleen lang om deze lange SQL te ontleden, maar elke aanroep heeft een ander aantal afhankelijke parameters die afzonderlijk worden geparseerd en gepland (zie dit artikel waarin het wordt uitgelegd ).
-
Er is een harde limiet voor gebonden parameters in een SQL-instructie. U kunt de
OR
. herhalen een paar keer om deIN
. te omzeilen limiet, maar je gaat op een gegeven moment de limiet voor SQL-instructies bereiken.
Voor dat soort zoekopdrachten is het meestal beter om tijdelijke tabellen
. Maak er een vóór uw zoekopdracht, voeg alle ID's erin toe en voeg deze samen met de entiteitstabel in uw zoekopdracht om de IN
te simuleren voorwaarde.
In het ideale geval kunt u de JPA vervangen door een opgeslagen procedure, vooral als u tienduizenden id's uit de database haalt om ze bij de volgende query terug te geven aan de database.