JPA和mybatis的CRUD比較

weixin_34138377發表於2017-02-15

發現網上有不少帖子說JPA速度慢,也有不少帖子反駁,不知道信那個乾脆自己測試一下

測試所用的SpringBoot版本:1.4.3.RELEASE

測試所用的資料庫:MySQL

  1. 插入速度比較(此時的資料表中基本為空)

    • JPA插入一條資料
      一次請求 插入一條資料,用時75ms,之後每次請求 插入一條資料,用時在3-5ms
      一次請求 插入一萬條資料(一萬個save),用時 45590ms
    • mybatis插入一條資料
      一次請求 插入一條資料,用時377ms,之後每次請求 插入一條資料,用時在2-4ms
      一次請求 插入一萬條資料(一萬個save),用時 7846ms
  2. 查詢速度的比較(此時資料表中有1萬條資料)

    • JPA查詢資料(JPA的findByTitle)
      一次查詢,查詢結果為400條資料,用時274ms,之後10次連續的查詢,平均用時8ms/次
    • mybatis查詢資料
      一次查詢,查詢結果為400條資料,用時528ms,之後10次連續的查詢,平均用時21ms/次
  3. 查詢20萬資料量速度的比較

    • JPA查詢資料(JPA的findByTitle)
      一次查詢,查詢結果為400條資料,用時452ms,之後10次連續的查詢,平均用時89ms/次
    • mybatis查詢資料
      一次查詢,查詢結果為400條資料,用時538ms,之後10次連續的查詢,平均用時115ms/次
  4. 查詢百萬資料量速度的比較(此時資料表中有108萬條資料)

    • JPA查詢資料(JPA的findByTitle)
      一次查詢,查詢結果為400條資料,用時892ms,之後10次連續的查詢,平均用時492ms/次
    • mybatis查詢資料
      一次查詢,查詢結果為400條資料,用時985ms,之後10次連續的查詢,平均用時483ms/次
  5. 分頁查詢百萬資料量速度的比較(此時資料表中有108萬條資料)

    • JPA分頁查詢資料(自定義查詢語句)
      一次查詢,每頁查詢結果為50條資料,用時96ms,之後10次連續的查詢,平均用時8ms/次
  • JPA分頁查詢資料(Pageable查詢)
    一次查詢,每頁查詢結果為50條資料,用時429ms,之後10次連續的查詢,平均用時164ms/次
  • mybatis查詢資料
    一次查詢,每頁查詢結果為50條資料,用時506ms,之後10次連續的查詢,平均用時6ms/次
  1. 刪除資料比較(此時資料表中有108萬條資料)
  • JPA刪除一條資料(deteteBy)
    第一次刪除用時266ms,之後每次刪除平均用時2ms
  • JPA刪除一天資料(自定義刪除)
    第一次刪除用時68ms,之後每次刪除平均用時1ms
  • mybatis刪除一條資料
    第一次刪除用時36ms,之後每次刪除平均用時1ms
  1. 更新資料的比較(此時資料表中有108萬條資料)
  • JPA更新一條資料
    第一次更新一條資料(根據主鍵id更新),用時62ms,之後每次更新平均2ms/次
  • mybatis更新一條資料
    第一次更新一條資料(根據主鍵id更新),用時40ms,之後每次更新平均2ms/次
  1. 千萬級查詢的比較(此時資料表中有1100萬條資料)
  • JPA查詢一條資料(findById)
    第一次查詢一條資料(根據主鍵id查詢),用時285ms,之後每次查詢平均2ms/次
  • JPA查詢一條資料(自定義查詢)
    第一次查詢一條資料(根據主鍵id查詢),用時87ms,之後每次查詢平均2ms/次
  • mybatis查詢一條資料
    第一次查詢一條資料(根據主鍵id查詢),用時377ms,之後每次查詢平均2ms/次

測試資料僅供參考

相關文章