nezhaxiaozi
V2EX  ›  Java

Spring 中使用 JPA(分页,更新,删除,多表)效率真的很低吗

  •  2
     
  •   nezhaxiaozi · Oct 30, 2018 · 8167 views
    This topic created in 2932 days ago, the information mentioned may be changed or developed.
    最近项目需要优化 DAO 层,优化查询速度。
    从博客上偶然发现原来使用 JPA 进行分页,更新,删除,多表这些操作 JPA 的执行速度比 MyBatis 还慢,最快的是自定义 SQL,而且和自定义 SQL 相比,JPA 的速度差了好多!

    那我们是不是需要多使用些自定义 SQL 呢? JPA 还能不能优化呢?
    19 replies  •  2018-11-09 14:58:30 +08:00
    V2XEX
    V2XEX
    Oct 30, 2018 via Android
    1
    你打印 SQL 看看是不是程序执行了意料之外的语句
    rb6221
    rb6221
    Oct 30, 2018 via Android
    2
    量上去了就慢
    vjnjc
    vjnjc
    Oct 30, 2018
    3
    自定义 sql 是指定 select 内容吗?
    lihongjie0209
    lihongjie0209
    Oct 30, 2018
    4
    感觉是配置出问题了, JPA 有很多配置项可以在特定的场景下用来优化
    builder
    builder
    Oct 30, 2018
    5
    个人觉得多表操作查询还是用存储过程快,没有 DBA 就直接 MyBatis 自己写 SQL,表和表之前不要用什么主外键关联,很慢的,而且后期维护特别不方便,更不方便拓展,所以 JPA 只用来进行简单的单表操作吧,能够节省一部分开发时间,运行效率没多大差距
    lsongiu
    lsongiu
    Oct 30, 2018
    6
    简单的 sql 还好,还可以配合二级缓存查询缓存使用,复杂的 sql 速度就明显不行了
    unifier
    unifier
    Oct 30, 2018
    7
    jpa 是基于 hibernate 的吧,比 mybatis 慢是正常的
    lastpass
    lastpass
    Oct 30, 2018 via Android
    8
    回复 @builder 然而我这里实际使用情况是,存储过程简直卡爆。
    谁再把业务写在数据库上我打死他。
    johnniang
    johnniang
    Oct 30, 2018 via Android
    9
    基本上都没有进行多表关联。而是拆分请求进行多表关联,或者使用自定义 sql。
    519718366
    519718366
    Oct 30, 2018
    10
    @lastpass 前半句我不知道。
    谁再把业务写在数据库上我打死他
    neoblackcap
    neoblackcap
    Oct 30, 2018
    11
    @builder 外键不会特别地让查询变慢。外键带来的成本大概是使插入变慢,扩展性变差。
    HarryQu
    HarryQu
    Oct 30, 2018 via Android
    12
    @lastpaass 没看懂你什么意思? 是避免使用外键约束吗? 指教下 谢谢
    wjh466587224
    wjh466587224
    Oct 30, 2018
    13
    jpa 配合 mongo 吧,mongo 都是集成成一个 collection,都属于单表查询了
    rykinia
    rykinia
    Oct 31, 2018
    14
    我在公司产品上用了 JPA,在简单的 CRUD 中,和 mybatis 不可能有可直接观察到的差距

    我觉得你应该检查数据库的配置,以及主键、索引什么的
    colincat
    colincat
    Oct 31, 2018
    15
    JPA 我感觉就行,没必要 mybatis 了,都 8102 年了,还搞 mybatis 没啥意思,配置繁多,表又不能自动生成,大部分都是简单的 CURD,连表直接用 nativeQuery 就好了,不要搞什么外键,后期难拆
    最重要的还是看项目规模,什么样类型的项目来选择,推荐 JPA,用的很爽,实在觉得慢可以加一层缓存。
    colincat
    colincat
    Oct 31, 2018
    16
    @HarryQu 互联网玩法都是避免外键的,后期数据量大了好弄
    nezhaxiaozi
    nezhaxiaozi
    OP
    Oct 31, 2018
    17
    @colincat 我们公司自己封装了 MyBatis 和 JPA,搞得好复杂的==...
    builder
    builder
    Nov 9, 2018
    18
    @lastpass 注意,存储过程是 DBA 写的,开发人员写的只能算得上 sql 集合,所以你还是 Mybatis 写 SQL 吧
    builder
    builder
    Nov 9, 2018
    19
    @neoblackcap 单独 sql 语句查询 外键没多大影响,但是一旦外键和 Hibernate JPA 结合 ,通过 java 调用,百分百慢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1015 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 18:40 · PVG 02:40 · LAX 10:40 · JFK 13:40
    ♥ Do have faith in what you're doing.