Pourquoi oracle À l'alinéa a de la limite de 1000 uniquement pour les données statiques?
Oracle À l'alinéa a de la limite de 1000 pour les données statiques,mais il accepte de données illimité de sous-requêtes. pourquoi?
Ne pas question Oracle Grandeur, il est interdit aux communes de l'utilisateur 😀 Juste une blague. Vous pouvez la remplacer par OÙ par_id DANS ('a','b', ...,'z') OU par_id DANS ('ou','pr'...'zd')
De nombreuses façons pour remplacer ce (j'en ai trouvé 3 ou 4 dans stackexhange).. Mais la raison en est peut-être simplement comme des contraintes de base dans Oracle pré charge, max octets dans la requête etc
Si vous avez plus d'une douzaine d'entrées, vous devriez être en utilisant une sous-requête, de la sorte, de toute façon. 1000 est une limite arbitrairement grande - probablement déjà trop grand.
De nombreuses façons pour remplacer ce (j'en ai trouvé 3 ou 4 dans stackexhange).. Mais la raison en est peut-être simplement comme des contraintes de base dans Oracle pré charge, max octets dans la requête etc
Si vous avez plus d'une douzaine d'entrées, vous devriez être en utilisant une sous-requête, de la sorte, de toute façon. 1000 est une limite arbitrairement grande - probablement déjà trop grand.
OriginalL'auteur Vivek Baranwal | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
C'est une restriction sur les liste d'expression:
Pourquoi 1000? Sans doute la mise en œuvre doit être une sorte de limite, et que, probablement, semblait plus que suffisant. Il y a peut-être bien, ou certainement peut-être lorsque cette limite a été fixée il y a plusieurs décennies, une des raisons de performances pour la limite, d'autant que le
IN
est converti en de multiplesOR
consolidés par l'optimiseur dans ce cas (que vous pouvez voir si vous regardez le plan d'exécution).J'avais de la difficulté à proposer un scénario raisonnable nécessaire pour obtenir n'importe où près que, avec des valeurs fixes qui ne peuvent pas être dérivées à partir d'autres données de toute façon comme une sous-requête.
Je soupçonne que c'est en quelque sorte liée à la logique de la base de données des limites de qui disent que vous ne pouvez pas avoir plus de 1000 colonnes dans une table, par exemple, depuis une liste d'expression est utilisée dans une instruction insert de liste, les colonnes et les valeurs de l'insertion de l'expression de la liste doit être en mesure de correspondre à cela, mais peut-être n'a pas de raison de le dépasser.
Spéculation, bien sûr... sans voir le fonctionnement interne du logiciel que vous êtes peu probable d'obtenir une réponse définitive.
OriginalL'auteur Alex Poole
C'est parce que EN a de très mauvaises performances, avec un grand nombre de valeurs dans la liste. C'est juste raccourci OU de la clause, et au niveau base de données, le moteur du changement OU de l'.
Vous devriez aussi éviter de faire des sous-requêtes dans la clause - une meilleure utilisation EXISTE.
IN
etEXISTS
sont logiquement équivalentes. Ils sont traités de la même façon par l'optimiseur Oracle. Vous devez utiliser l'un ou l'autre, à votre discrétion, il ne sera pas question d'un point de vue des performances.OriginalL'auteur schabluk
Essayez d'utiliser "existe" que "dans".Vous pouvez ainsi créer des sous-requêtes à l'aide de "existe".
OriginalL'auteur Mickee