Я выполняю собственный запрос, используя
entityManager.createNativeQuery(sqlQuery);
query.setMaxResults(maxResults);
List<Object[]> resultList = query.getResultList();
Чтобы ускорить запрос, я подумал включить подсказку FIRST_ROWS(n) или ограничение с помощью WHERE ROWNUM > n.
Используя инструменты, я вижу, что действительно OraclePreparedStatement.executeQuery быстрее, но гораздо больше времени тратится на EJBQueryImpl.getResultList, что приводит к очень низкой производительности в целом. При более подробном рассмотрении я вижу, что каждый 10-й вызов ResultSet.next() занимает примерно столько же времени, сколько и сам executeQuery(). Это странное поведение прекращается, когда я пропускаю подсказку запроса или условие ROWNUM, тогда каждый 10-й вызов resultset.next несколько меньше, чем другие, но всего 2 мс вместо 3 секунд.