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

Utilizzo di JPA e 1000 ID in Oracle IN Operator

Lavorare attorno a IN limite è inefficiente e JPA non è sempre lo strumento giusto per il lavoro. Considera quanto segue:

  1. Migliaia di valori associati risulteranno potenzialmente in megabyte di SQL. Ci vorrà molto tempo per inviare questo SQL al database. Il database potrebbe richiedere più tempo per leggere il testo SQL piuttosto che eseguirlo come da Risposta di Tom alla domanda "Limite e conversione molto lunga IN elenco:WHERE x IN ( ,,, ...)" .

  2. Sarà inefficiente a causa dell'analisi SQL. Non solo ci vuole molto tempo per analizzare questo lungo SQL, ma ogni chiamata ha un numero diverso di parametri associati che verranno analizzati e pianificati separatamente (vedi questo articolo che lo spiega ).

  3. Esiste un limite rigido di parametri associati in un'istruzione SQL. Puoi ripetere il OR alcune volte per aggirare il IN limit ma a un certo punto raggiungerai il limite dell'istruzione SQL.

Per questo tipo di query di solito è meglio creare temporaneo tabelle . Creane uno prima della tua query, inserisci tutti gli identificatori al suo interno e uniscilo alla tabella delle entità nella tua query per simulare il IN condizione.

Idealmente, è possibile sostituire JPA con una procedura memorizzata, soprattutto se si estraggono decine di migliaia di identificatori dal database solo per ritrasferirli al database nella query successiva.