Сложный запрос SQL занимает 2 секунды в базе данных, но 80 секунд в Java приложении - PullRequest
1 голос
/ 27 января 2020

У меня сложный запрос SQL, который объединяет несколько таблиц и вызывает некоторую функцию для вычисления некоторых данных. Даже я превратил его в View , чтобы создать удобную реализацию JPA для получения данных. Базовый запрос SQL занимает 2 секунды, когда он выполняется в базе данных. Тем не менее, он тратит 80 секунд, когда выполняется из приложения Spring Boot.

Я провел тест несколькими способами и получил тот же результат:

  • Путем создания собственного запроса объект из JPA entityManager
    Query typedQuery = entityManager.createNativeQuery(sql, Result.class);
  • Путем создания сопоставленного объекта в представлении и запроса с использованием CriteriaSpecification
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<ViewResult> query = builder.createQuery(ViewResult.class);
    Root<ViewResult> r = query.from(ViewResult.class);

    Predicate predicate = builder.conjunction();
    ...

    query.where(predicate);
    TypedQuery<ViewResult> typedQuery = entityManager.createQuery(query);
    return typedQuery.getResultList();
  • С помощью JDB C и реализация Resulset (повторение набора результатов для построения требуемого списка)

Существует ли метод для достижения результатов с временем, близким к тому, которое задерживается при работе в менеджере баз данных?

...