sql >> Database >  >> RDS >> Oracle

Waarom heeft de Oracle IN-clausule een limiet van 1000 alleen voor statische gegevens?

Het is een beperking op elke lijst met uitdrukkingen:

Een door komma's gescheiden lijst van uitdrukkingen kan niet meer dan 1000 uitdrukkingen bevatten.

Waarom 1000? Vermoedelijk heeft de implementatie een soort limiet nodig, en dat leek waarschijnlijk meer dan genoeg. Er kan heel goed zijn, of kan zeker zijn geweest toen die limiet decennia geleden werd ingesteld, ook een prestatiereden voor de limiet, vooral omdat de IN wordt geconverteerd naar meerdere OR uitspraken van de optimiser in dit geval (die u kunt zien als u naar het uitvoeringsplan kijkt).

Ik zou moeite hebben om een ​​redelijk scenario te bedenken dat daar in de buurt moest komen, met vaste waarden die toch niet als subquery uit andere gegevens konden worden afgeleid.

Ik vermoed dat het enigszins te maken heeft met de logische databaselimieten die bijvoorbeeld zeggen dat je niet meer dan 1000 kolommen in een tabel kunt hebben; aangezien een expressielijst wordt gebruikt in een insert-instructie om zowel de kolommen als de waarden die worden ingevoegd weer te geven, moet de expressielijst daaraan kunnen voldoen, maar heeft misschien geen reden om deze te overschrijden.

Speculatie natuurlijk... zonder de binnenkant van de software te zien, is het onwaarschijnlijk dat u een definitief antwoord krijgt.



  1. Charlotte SQL Server-gebruikersgroep:langzame zoekopdrachten oplossen. Snel.

  2. SQL GROUP BY- 3 eenvoudige tips om resultaten te groeperen als een professional

  3. Database-patchsets verkrijgen

  4. Foutwaarde bestaat niet - probleem postgresql INSERT INTO