sql >> Databasteknik >  >> RDS >> Oracle

Varför oracle IN-klausul har en gräns på 1000 endast för statisk data?

Det är en begränsning för alla uttryckslistor:

En kommaavgränsad lista med uttryck får inte innehålla fler än 1 000 uttryck.

Varför 1000? Förmodligen behöver implementeringen någon form av gräns, och det verkade nog mer än tillräckligt. Det kan mycket väl finnas, eller kan säkert ha funnits när den gränsen sattes för decennier sedan, ett prestandaskäl för gränsen också, särskilt som IN konverteras till flera OR uttalanden av optimeraren i det här fallet (som du kan se om du tittar på genomförandeplanen).

Jag skulle kämpa för att komma på ett rimligt scenario som behövde komma någonstans i närheten av det, med fasta värden som ändå inte kunde härledas från annan data som en underfråga.

Jag misstänker att det är något relaterat till de logiska databasgränserna som säger att du inte kan ha mer än 1000 kolumner i en tabell, till exempel; eftersom en uttryckslista används i en insert-sats för att lista både kolumnerna och värdena som infogas, måste uttryckslistan kunna matcha det, men det kanske inte finns någon anledning att överskrida det.

Spekulationer förstås... utan att se insidan av programvaran är det osannolikt att du får ett definitivt svar.



  1. Fallstudie för SQL Server Databas Server Hardware Upgrade

  2. Agentavveckling i EM13c

  3. Undvikande enstaka citat i SQL Server

  4. Postgresql-kolumnen hittades inte, men visas i Beskriv