sql >> Base de Datos >  >> RDS >> Oracle

Uso de JPA y 1000 ID en Oracle IN Operator

Trabajando alrededor del IN limit es ineficiente y JPA no siempre es la herramienta adecuada para el trabajo. Considere lo siguiente:

  1. Miles de valores enlazados darán como resultado potencialmente megabytes de SQL. Llevará mucho tiempo enviar este SQL a la base de datos. La base de datos puede tardar más en leer el texto SQL que en ejecutarlo según Respuesta de Tom a la pregunta "Límite y conversión muy larga EN lista:DÓNDE x ENTRADA ( ,,, ...)" .

  2. Será ineficiente debido al análisis de SQL. No solo lleva mucho tiempo analizar este SQL largo, sino que cada invocación tiene una cantidad diferente de parámetros vinculados que se analizarán y planificarán por separado (consulte este artículo que lo explica ).

  3. Hay un límite estricto de parámetros vinculados en una instrucción SQL. Puedes repetir el OR un par de veces para evitar el IN límite, pero llegará al límite de sentencias SQL en algún momento.

Para ese tipo de consultas, generalmente es mejor crear temporal mesas . Cree uno antes de su consulta, inserte todos los identificadores en él y únalo con la tabla de entidades en su consulta para simular el IN condición.

Idealmente, puede reemplazar el JPA con un procedimiento almacenado, especialmente si extrae decenas de miles de identificadores de la base de datos solo para devolverlos a la base de datos en la siguiente consulta.