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í:
-
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 ( ,,, ...)" .
-
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 ).
-
V příkazu SQL existuje pevný limit vázaných parametrů. Můžete opakovat
OR
několikrát obejítIN
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.