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

Użycie JPA i 1000 ID w Oracle IN Operator

Praca z IN limit jest nieefektywny, a JPA nie zawsze jest odpowiednim narzędziem do pracy. Rozważ następujące kwestie:

  1. Tysiące powiązanych wartości dadzą potencjalnie megabajty SQL. Wysłanie tego kodu SQL do bazy danych zajmie dużo czasu. Baza danych może potrwać dłużej, aby odczytać tekst SQL, niż wykonać go zgodnie z Odpowiedź Tomka na pytanie "Limit i konwersja bardzo długa lista IN:WHERE x IN (,,, ...)" .

  2. Będzie nieefektywny z powodu parsowania SQL. Nie tylko parsowanie tego długiego kodu SQL zajmuje dużo czasu, ale każde wywołanie ma inną liczbę powiązanych parametrów, które będą analizowane i planowane osobno (patrz ten artykuł wyjaśniający to ).

  3. W instrukcji SQL istnieje sztywny limit parametrów powiązanych. Możesz powtórzyć OR kilka razy, aby obejść IN limit, ale w pewnym momencie osiągniesz limit instrukcji SQL.

W przypadku tego typu zapytań zwykle lepiej jest utworzyć tymczasowe stoły . Utwórz je przed zapytaniem, wstaw do niego wszystkie identyfikatory i połącz je z tabelą encji w zapytaniu, aby zasymulować IN stan.

W idealnym przypadku można zastąpić JPA procedurą składowaną, zwłaszcza jeśli wyciągasz dziesiątki tysięcy identyfikatorów z bazy danych tylko po to, aby przekazać je z powrotem do bazy danych w następnym zapytaniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przewijaj wstępnie zdefiniowane wartości

  2. DBMS OUTPUT PUT nie drukuje niczego

  3. Jak przejść przez różne schematy i wykonać na każdym z nich trochę sql?

  4. Jaka jest różnica między połączeniem sterownika OCI i THIN a połączeniem ze źródłem danych między java a Oracle XE?

  5. Czy występuje problem z właściwościami JPA Entities, Oracle 10g i Calendar Type?