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

Použití JPA a 1000 ID v Oracle IN Operator

Práce kolem IN limit je neefektivní a JPA není vždy tím správným nástrojem pro danou práci. Zvažte následující:

  1. Tisíce vázaných hodnot budou mít za následek potenciálně megabajty SQL. Odeslání tohoto SQL do databáze bude trvat dlouho. Databáze může trvat déle, než načte text SQL, než jej spustí podle Tomova odpověď na otázku "Omezení a konverze velmi dlouhý seznam IN:WHERE x IN ( ,,, ...)" .

  2. Bude to neefektivní kvůli analýze SQL. Nejen, že analyzování tohoto dlouhého SQL trvá dlouho, ale každé vyvolání má jiný počet vázaných parametrů, které budou analyzovány a plánovány samostatně (viz tento článek, který to vysvětluje ).

  3. V příkazu SQL existuje pevný limit vázaných parametrů. Můžete opakovat OR několikrát obejít IN limit, ale v určitém okamžiku narazíte na limit příkazů SQL.

Pro tyto typy dotazů je obvykle lepší vytvořit dočasné tabulky . Vytvořte jej před dotazem, vložte do něj všechny identifikátory a spojte jej s tabulkou entit v dotazu, abyste simulovali IN stav.

V ideálním případě můžete JPA nahradit uloženou procedurou, zvláště pokud z databáze vytahujete desítky tisíc identifikátorů jen proto, abyste je v dalším dotazu předali zpět do databáze.



  1. Hibernate hbm2ddl.auto Výchozí hodnota

  2. WordPress pre_get_posts nefunguje

  3. Jak ukládat rozvrhy zaměstnanců do databáze

  4. překlad mongodb pro sql INSERT...SELECT