У меня есть пользовательский запрос вдоль этих строк. Я получаю список orderIds извне. У меня есть весь список объектов заказа со мной, поэтому я могу изменить запрос каким-либо образом, если это необходимо.Быстрая/эффективная альтернатива предложению IN в пользовательских/собственных запросах в данных весны jpa
@Query("SELECT p FROM Person p INNER JOIN p.orders o WHERE o.orderId in :orderIds)")
public List<Person> findByOrderIds(@Param("orderIds") List<String> orderIds);
Этот запрос работает нормально, но иногда это может быть где-нибудь между 50-1000 записей в списке orderIds посланных от внешней функции. Таким образом, он становится очень медленным, занимая целых 5-6 секунд, что недостаточно быстро. Мой вопрос: есть ли лучший, более быстрый способ сделать это? Когда я googled, и на этом сайте, я вижу, мы можем использовать ЛЮБОЙ, EXISTS: Postgresql: alternative to WHERE IN respective WHERE NOT IN или создать временную таблицу: https://dba.stackexchange.com/questions/12607/ways-to-speed-up-in-queries-under-postgresql или присоединить это к предложению VALUES: Alternative when IN clause is inputed A LOT of values (postgreSQL). Все эти ответы настроены на прямые вызовы SQL, ничто не основано на JPA. Любое ключевое слово не поддерживается весенними данными. Не уверен в создании временных таблиц в пользовательских запросах. Я думаю, что могу сделать это с родными запросами, но не пробовал. Я использую spring-data + OpenJPA + PostgresSQL.
Можете ли вы предложить решение или дать указатели? Прошу прощения, если я что-то пропустил.
спасибо,
Алиса