sql >> Database teknologi >  >> RDS >> Oracle

JPA og 1000 ID bruges i Oracle IN Operator

Omgå IN grænse er ineffektiv, og JPA er ikke altid det rigtige værktøj til opgaven. Overvej følgende:

  1. Tusindvis af bundne værdier vil resultere i potentielt megabyte SQL. Det vil tage lang tid at sende denne SQL til databasen. Databasen kan tage længere tid at læse SQL-teksten end at udføre den i henhold til Toms svar på spørgsmålet "Grænse og konvertering meget lang IN-liste:WHERE x IN ( ,,, ...)" .

  2. Det vil være ineffektivt på grund af SQL-parsing. Ikke alene tager det lang tid at parse denne lange SQL, men hver påkaldelse har et forskelligt antal bundne parametre, som vil blive parset og planlagt separat (se denne artikel, der forklarer det ).

  3. Der er en hård grænse for bundne parametre i en SQL-sætning. Du kan gentage OR et par gange for at omgå IN limit, men du kommer til at ramme SQL-sætningsgrænsen på et tidspunkt.

For disse typer forespørgsler er det normalt bedre at oprette midlertidigt tabeller . Opret en før din forespørgsel, indsæt alle identifikatorerne i den, og forbind den med entitetstabellen i din forespørgsel for at simulere IN tilstand.

Ideelt set kan du erstatte JPA med en lagret procedure, især hvis du trækker titusindvis af identifikatorer ud fra databasen bare for at sende dem tilbage til databasen i den næste forespørgsel.



  1. BEREGN PROCENT I SQL efter gruppe

  2. Gruppér efter kolonne og flere rækker i en række flere kolonner

  3. Er det muligt at køre apriori association regel i mysql statement?

  4. Søg i mysqli-tabel med formular og visningsresultater