如何通过Spring Data JPA中的投影提高请求的响应速度?

时间:2018-01-18 16:39:24

标签: java spring hibernate spring-data spring-data-jpa

我有一个目标存储库,它根据竞争对象返回一个列表目标:

public interface GoalRespository extends JpaRepository<Goal,Long> {

    @Query(value = "SELECT * FROM goal g " +
            "JOIN matches m ON g.goal_match = m.idmatch " +
            "JOIN competitions c ON m.competition = c.idcompetitions " +
            "WHERE c.idcompetitions = ?1", nativeQuery = true)
    List<Goal> findGoalsByCompetition(@Param ("competition") Long competition);

}

然后我为我的目标等级投了一个投射,让投球手回归得分:

@Projection(name = "goalInlinePlayers", types = { Goal.class })
public interface GoalInlinePlayers {

    Long getIdgoal();
    Long getGoalMinute();
    Long getGoalSeconds();
    Player getGoalPlayer();
}

所以我的问题是如果我在没有投影的情况下对端点进行GET调用

  

/目标/搜索/ findGoalsByCompetition?竞争= 219

如果我将投影添加到我的查询参数

,则响应时间不会超过一秒
  ?

/目标/搜索/ findGoalsByCompetition竞争= 219&安培;投影= goalInlinePlayers

需要大约12秒才能解决。 此外,出于某些显示目的,我需要在我的投影中添加助手和团队,在这种情况下需要20秒。

一些额外数据:

  • 花费这段时间的例子有350个目标。
  • 我有一个完全相同的东西,从投标返回比赛,以内联主客队球对象,需要1.5秒。
  • 球队表有150条记录,而球员表大约有2000条。(不确定是否相关)

有关为什么花费这么长时间才能解决带有预测的请求或瓶颈在哪里的任何想法?

0 个答案:

没有答案