sql >> Database >  >> RDS >> Oracle

JPA en 1000 ID gebruiken in Oracle IN Operator

Werken rond de IN limiet is inefficiënt en JPA is niet altijd de juiste tool voor de klus. Overweeg het volgende:

  1. 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 ( ,,, ...)" .

  2. 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 ).

  3. Er is een harde limiet voor gebonden parameters in een SQL-instructie. U kunt de OR . herhalen een paar keer om de IN . 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.



  1. V$SQL_SHARED_CURSOR TOP_LEVEL_RPI_CURSOR

  2. [Video] Gegevensintegratie met PostgreSQL

  3. Ontwerppatroon voor aangepaste velden in relationele database

  4. Patchbeleid