Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо клаузата на oracle IN има ограничение от 1000 само за статични данни?

Това е ограничение за всеки списък с изрази:

Списъкът с изрази, разделен със запетая, може да съдържа не повече от 1000 израза.

Защо 1000? Вероятно реализацията се нуждае от някакво ограничение и това вероятно изглеждаше като повече от достатъчно. Възможно е да има или със сигурност да е имало, когато това ограничение е било определено преди десетилетия, и причина за производителността за ограничението, особено като IN се преобразува в множество OR изявления от оптимизатора в този случай (които можете да видите, ако погледнете плана за изпълнение).

Ще се мъча да измисля разумен сценарий, който трябва да се доближи до това, с фиксирани стойности, които така или иначе не могат да бъдат извлечени от други данни като подзаявка.

Подозирам, че е донякъде свързано с ограниченията на логическата база данни, които казват, че не можете да имате повече от 1000 колони в таблица, например; тъй като списъкът с изрази се използва в израз за вмъкване, за да се изброят както колоните, така и стойностите, които се вмъкват, списъкът с изрази трябва да може да съответства на това, но може би няма причина да го надвишава.

Спекулации, разбира се... без да видите вътрешността на софтуера, е малко вероятно да получите категоричен отговор.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. давайки правилно потребителско име и парола, вземете ORA-01017:невалидно потребителско име/парола; влизане е отказано

  2. utl_file.fopen Параметри в Oracle

  3. Как да генерирам програмно DDL от базата данни на Oracle?

  4. Парсер за Oracle SQL

  5. Изтриване на редове от родителски и дъщерни таблици