MyBatis很慢

时间:2012-10-25 15:47:17

标签: spring mybatis

我想知道为什么MyBatis在我的应用程序中

对于SELECT COUNT(*),所用时间为:

  1. 20秒 - 第一次请求
  2. 2-3秒 - 后续请求
  3. 缓存很可能会使后续请求更快。

    配置

    • 3层(WPF用户界面 - Java后端 - Oracle数据库)
    • JBoss 服务器公开Java Backed作为WPF UI的Web服务
    • 请求时间 == WPF UI发送和接收结果之间的时间
    • 正在使用的Spring Framework

    尝试了方法

    1. 禁用日志记录

      我不知道是否禁用日志记录子系统和log4j会产生影响;但是,我得到的最好的是SELECT COUNT(*)的15秒。

    2. 已禁用缓存和延迟加载

      这最多可能造成5秒的差异。

    3. 请做以下帮助?

      1. 使用显式结果映射,关闭自动映射。 (参见结果图here)。
      2. 使用合并。 (参见环境here)。
      3. 交易是否可以通过子查询帮助加快SQL语句?
      4. 上面列出了上述技术:

        1. MyBatis forums
        2. JBoss Best Practices(第9页)
        3. 另一个例子

          对于具有2个连接和1个子查询的嵌套SQL语句,所用时间为:

          1. 60-90秒 - 第一次请求
          2. 2-3秒 - 后续请求

1 个答案:

答案 0 :(得分:8)

我解决了问题! MyBatis 现在需要同时查询直接针对数据库运行。

N + 1选择问题(很好地描述了here)。

解决方案

嵌套结果(与嵌套选择相对),也在上述同一页面上进行了描述。

它对我的SQL查询与4个连接的区别是巨大的:

  • 之前: 38 s
  • 之后: 3 s

我通过将其隔离到 MyBatis-Spring JUnit 测试用例(删除 JBoss 部分)来跟踪问题。< / p>