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

Използване на JPA и 1000 ID в Oracle IN Operator

Работа около IN ограничението е неефективно и JPA не винаги е правилният инструмент за работата. Помислете за следното:

  1. Хиляди обвързани стойности ще доведат до потенциално мегабайти SQL. Изпращането на този SQL към базата данни ще отнеме много време. Базата данни може да отнеме повече време, за да прочете SQL текста, отколкото да го изпълни според Отговорът на Том на въпрос "Ограничение и преобразуване много дълъг IN списък:WHERE x IN ( ,,, ...)" .

  2. Това ще бъде неефективно поради SQL анализ. Не само, че отнема много време за анализиране на този дълъг SQL, но всяко извикване има различен брой обвързани параметри, които ще бъдат анализирани и планирани отделно (вижте тази статия, която го обяснява ).

  3. Има строго ограничение на обвързаните параметри в SQL израз. Можете да повторите OR няколко пъти, за да заобиколите IN лимит, но в даден момент ще достигнете лимита на SQL израза.

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql loader - вторият заграден низ не присъства

  2. SQL Oracle:Заменете празен резултат с word

  3. Не може да се създаде Eclipse Data Source към Oracle 12c с помощта на 12c jar. Въпреки това 11g работи

  4. Извикване на Python от Oracle

  5. Копиране на данни от файл в CLOB в Oracle