MyBatis很慢

mau*_*yat 4 spring mybatis

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

对于a SELECT COUNT(*),所花费的时间是:

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

最有可能的是,缓存会使后续请求更快.

组态

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

尝试了方法

  1. 禁用日志记录

    我不知道,如果是禁用日志记录子系统和log4j的有差别; 但是,我得到的最好的是15秒SELECT COUNT(*).

  2. 禁用缓存和延迟加载

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

请做以下帮助?

  1. 使用显式结果映射,通过关闭自动映射.(请参阅此处的结果地图).
  2. 使用.(参见此处的环境).
  3. 事务是否有助于使用子查询加速SQL语句?

这里列出了上述技术:

  1. MyBatis论坛
  2. JBoss最佳实践(页9)

另一个例子

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

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

mau*_*yat 8

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

这是N + 1选择问题(这里很好地描述).

嵌套结果(与嵌套选择相对),也在上面提到的同一页面上描述.

它与我的SQL查询有4个连接的差异是巨大的:

  • 之前: 38秒
  • 之后: 3秒

我通过将它隔离到MyBatis-Spring周围的JUnit测试用例(删除JBoss部分)来跟踪问题.