Spring Boot JPA原生查询结果映射与性能优化问题
JPA关联查询性能优化与实体映射问题
我有一个CommunityProfile实体,关联了两个子实体:player(User类型)和rank(Rank类型)。默认Spring Boot JPA生成的查询获取200条记录耗时约9秒,速度极慢,但直接用以下MySQL原生查询能快速返回数据:
SELECT cp.*, r.*, u.* FROM community_profiles cp LEFT JOIN users u ON cp.player_id = u.id LEFT JOIN ranks r ON cp.rank_id = r.id WHERE cp.community_id = 1
请问如何让Repository把原生查询的结果映射到对应的实体/Model中?
我试过用JPA的Fetch Join查询,代码如下:
@Query("SELECT cp FROM CommunityProfile cp " + "LEFT JOIN FETCH cp.player u " + "LEFT JOIN FETCH cp.rank r " + "WHERE cp.communityId = :communityId") List<CommunityProfile> findByCommunityIdWithJoin(@Param("communityId") Integer communityId);
但这个查询的响应耗时仍有800-900毫秒,相比原生查询还是慢。作为对比,我用Laravel应用冷启动返回相同数据仅需400毫秒,求优化建议。
更新
我尝试给community_id加索引,但没看到明显性能提升,我的实现是否正确?
@Entity @Table(name = "community_profiles", indexes = @Index(name = "cp_ci_idx", columnList = "community_id")) public class CommunityProfile { }
内容的提问来源于stack exchange,提问作者Flinty926
相关产品推荐
相关产品推荐

