sql >> Databáze >  >> RDS >> Oracle

Proč má klauzule Oracle IN limit 1000 pouze pro statická data?

Je to omezení pro jakýkoli seznam výrazů:

Seznam výrazů oddělených čárkami nemůže obsahovat více než 1000 výrazů.

Proč 1000? Implementace pravděpodobně potřebuje nějaký limit, a to se pravděpodobně zdálo více než dostatečné. Může také existovat, nebo určitě mohl existovat, když byl tento limit stanoven před desítkami let, důvod pro výkon limitu, zejména jako IN se převede na více OR prohlášení optimalizátora v tomto případě (což můžete vidět, když se podíváte na plán provádění).

Snažil bych se přijít s rozumným scénářem, který by se tomu musel přiblížit, s pevnými hodnotami, které by stejně nebylo možné odvodit z jiných dat jako dílčí dotaz.

Mám podezření, že to trochu souvisí s logickými limity databáze, které říkají, že například v tabulce nemůžete mít více než 1000 sloupců; protože se v příkazu insert používá seznam výrazů k výpisu sloupců i vkládaných hodnot, seznam výrazů tomu musí odpovídat, ale možná nemá důvod jej překračovat.

Samozřejmě spekulace... aniž byste viděli vnitřní části softwaru, pravděpodobně nedostanete definitivní odpověď.



  1. Rozdělení řetězce na serveru SQL

  2. Jak opravit „Seznam výběru pro příkaz INSERT obsahuje méně položek než seznam vložení“

  3. Jak zahrnout nula / 0 výsledků do souhrnu COUNT?

  4. phpMyAdmin hází #2002 nelze se přihlásit k serveru mysql phpmyadmin