sql >> Database teknologi >  >> RDS >> Oracle

Hvorfor oracle IN-klausul kun har en grænse på 1000 for statiske data?

Det er en begrænsning på enhver udtryksliste:

En kommasepareret liste over udtryk må ikke indeholde mere end 1000 udtryk.

Hvorfor 1000? Formentlig har implementeringen brug for en form for grænse, og det virkede nok som mere end nok. Der kan meget vel være, eller helt sikkert kan have været, da denne grænse blev fastsat for årtier siden, også en præstationsårsag til grænsen, især som IN konverteres til flere OR udtalelser fra optimizeren i dette tilfælde (som du kan se, hvis du ser på udførelsesplanen).

Jeg ville kæmpe for at komme med et rimeligt scenarie, der skulle komme i nærheden af ​​det, med faste værdier, der alligevel ikke kunne udledes fra andre data som en underforespørgsel.

Jeg formoder, at det er noget relateret til de logiske databasegrænser, som siger, at du for eksempel ikke kan have mere end 1000 kolonner i en tabel; da en udtryksliste bruges i en insert-sætning til at vise både kolonnerne og de værdier, der indsættes, skal udtrykslisten være i stand til at matche det, men har måske ingen grund til at overskride den.

Spekulationer selvfølgelig... uden at se softwarens interne dele er det usandsynligt, at du får et endeligt svar.



  1. At bruge if(isset($_POST['submit'])) til ikke at vise ekko, når scriptet er åbent, virker ikke

  2. Hvordan tilføjes indledende nul i et tal i Oracle SQL-forespørgsel?

  3. hvordan får man start- og slutdatoerne for alle uger mellem to datoer i SQL server?

  4. PostgreSQL-arv med JPA, Hibernate