Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Uso de JPA e 1000 ID no Oracle IN Operator


Trabalhando em torno do IN limite é ineficiente e o JPA nem sempre é a ferramenta certa para o trabalho. Considere o seguinte:

  1. Milhares de valores vinculados resultarão em potencialmente megabytes de SQL. Levará muito tempo para enviar esse SQL ao banco de dados. O banco de dados pode demorar mais para ler o texto SQL do que executá-lo conforme A resposta de Tom para a pergunta "Limite e conversão muito longa IN list:WHERE x IN ( ,,, ...)" .

  2. Será ineficiente devido à análise SQL. Não apenas leva muito tempo para analisar esse SQL longo, mas cada invocação tem um número diferente de parâmetros vinculados que serão analisados ​​e planejados separadamente (consulte este artigo que explica isso ).

  3. Há um limite rígido de parâmetros vinculados em uma instrução SQL. Você pode repetir o OR algumas vezes para contornar o IN limite, mas você atingirá o limite da instrução SQL em algum momento.

Para esses tipos de consultas, geralmente é melhor criar temporário tabelas . Crie um antes de sua consulta, insira todos os identificadores nele e una-o com a tabela de entidades em sua consulta para simular o IN doença.

Idealmente, você pode substituir o JPA por um procedimento armazenado, especialmente se estiver retirando dezenas de milhares de identificadores do banco de dados apenas para passá-los de volta ao banco de dados na próxima consulta.