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

Por que a cláusula oracle IN tem limite de 1000 apenas para dados estáticos?


É uma restrição em qualquer lista de expressões:

Uma lista de expressões delimitadas por vírgulas não pode conter mais de 1.000 expressões.

Por que 1000? Presumivelmente, a implementação precisa de algum tipo de limite, e isso provavelmente parecia mais do que suficiente. Pode muito bem haver, ou certamente pode ter havido quando esse limite foi estabelecido décadas atrás, um motivo de desempenho para o limite também, particularmente como o IN é convertido em vários OR instruções do otimizador neste caso (que você pode ver se observar o plano de execução).

Eu lutaria para chegar a um cenário razoável que precisasse chegar perto disso, com valores fixos que não poderiam ser derivados de outros dados como uma subconsulta.

Suspeito que esteja um pouco relacionado aos limites lógicos do banco de dados que dizem que você não pode ter mais de 1.000 colunas em uma tabela, por exemplo; como uma lista de expressões é usada em uma instrução de inserção para listar as colunas e os valores que estão sendo inseridos, a lista de expressões deve ser capaz de corresponder a isso, mas talvez não tenha motivo para excedê-la.

Especulação, é claro... sem ver os componentes internos do software, é improvável que você obtenha uma resposta definitiva.