Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pourquoi la clause oracle IN a une limite de 1000 uniquement pour les données statiques?

C'est une restriction sur toute liste d'expression :

Une liste d'expressions délimitées par des virgules ne peut pas contenir plus de 1 000 expressions.

Pourquoi 1000 ? Vraisemblablement, la mise en œuvre a besoin d'une sorte de limite, et cela semblait probablement plus que suffisant. Il se peut bien qu'il y ait, ou qu'il y ait certainement eu lorsque cette limite a été fixée il y a des décennies, une raison de performance pour la limite également, en particulier en tant que IN est converti en plusieurs OR déclarations de l'optimiseur dans ce cas (que vous pouvez voir si vous regardez le plan d'exécution).

J'aurais du mal à trouver un scénario raisonnable qui devait s'en approcher, avec des valeurs fixes qui ne pourraient de toute façon pas être dérivées d'autres données en tant que sous-requête.

Je soupçonne que c'est quelque peu lié aux limites logiques de la base de données qui disent que vous ne pouvez pas avoir plus de 1000 colonnes dans une table, par exemple; puisqu'une liste d'expressions est utilisée dans une instruction d'insertion pour répertorier à la fois les colonnes et les valeurs insérées, la liste d'expressions doit pouvoir correspondre à cela, mais n'a peut-être aucune raison de la dépasser.

La spéculation bien sûr... sans voir les composants internes du logiciel, il est peu probable que vous obteniez une réponse définitive.