Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego klauzula Oracle IN ma limit 1000 tylko dla danych statycznych?

Jest to ograniczenie na dowolnej liście wyrażeń:

Lista wyrażeń rozdzielonych przecinkami może zawierać nie więcej niż 1000 wyrażeń.

Dlaczego 1000? Przypuszczalnie wdrożenie wymaga pewnego rodzaju limitu, a to prawdopodobnie wydawało się więcej niż wystarczające. Równie dobrze może istnieć, lub z pewnością mógł być, gdy ten limit był ustalany kilkadziesiąt lat temu, powód ograniczenia wydajności również, szczególnie gdy IN jest konwertowany na wiele OR oświadczenia optymalizatora w tym przypadku (które można zobaczyć, patrząc na plan wykonania).

Trudno byłoby mi wymyślić rozsądny scenariusz, który musiałby się zbliżyć do tego, ze stałymi wartościami, których i tak nie można uzyskać z innych danych jako podzapytania.

Podejrzewam, że jest to nieco związane z logicznymi ograniczeniami bazy danych, które mówią, że na przykład nie można mieć więcej niż 1000 kolumn w tabeli; ponieważ lista wyrażeń jest używana w instrukcji INSERT, aby wyświetlić zarówno kolumny, jak i wstawiane wartości, lista wyrażeń musi być w stanie to dopasować, ale może nie ma powodu, aby ją przekraczać.

Oczywiście spekulacje... bez wglądu w wewnętrzne oprogramowanie prawdopodobnie nie uzyskasz ostatecznej odpowiedzi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Symulowane OLAP

  2. Jak znaleźć tabelę, w której statystyki są zablokowane?

  3. Usunąć wszystkie rekordy oprócz ostatniego?

  4. Dynamiczne przestawianie wierszy na kolumny w Oracle

  5. Jak podejść do Got minus jeden z błędu wywołania odczytu podczas łączenia się z instancją Amazon RDS Oracle?