MyBatis - 将44000行拉出3000个对象

时间:2014-01-17 13:26:42

标签: performance mybatis

我正在使用mybatis 3.1.0 jar和spring mybatis jar。

我需要16秒才能将44000行拉出到3000个实体对象中。

拍摄时间:正常查询执行时间:11秒

有任何提高绩效的建议吗?

感谢。

2 个答案:

答案 0 :(得分:2)

首先,做一些分析,看看您花了多少时间(a)提取数据,例如:在独立数据库工具中运行查询并对其进行基准测试,然后(b)将数据编组到对象中花费了多少。

后续步骤将取决于(a)或(b)中哪一个表现最差。

如果(a),则花时间调整查询 - 对表进行索引,对基础结构进行非规范化。

如果(b)考虑更平坦或人口较少的模型。

编辑:

DB方面的额外想法减少11秒的持续时间:

  • 检查您的查询是否在每个点击中索引,而不是执行任何表扫描
  • 检查您的查询是否会撤回最小字段,例如如果你只需要8个字段,请不要退回20
  • 如果你在MySql上,
  • 检查你的查询没有做低效的子查询(是吗?)
  • 检查你的查询是不是在调用任何不必要的函数或子程序(可能不太可能,但值得一提......)

对象方面的额外想法:

  • 避免设置您不需要的对象字段

额外的一般想法:

  • 添加一些日志记录,例如单个案例(或者说,例如100),看看时间在应用程序中花费的时间,你需要通用的代码优化技术 - 任何循环,或者不是100%必要的,看看改变/删除

  • 如果性能是最重要的考虑因素,请考虑更改您的要求 - 以不同方式构建您的页面或屏幕,例如,以便让您更快地进行数据库检索

第二次编辑 - 您真的需要使用所有44,000行和它们提供的3,000个对象吗?你可以用更少的时间,例如将它们分成10组并与它们分页? (猜测,你的应用程序可能什么都不做)

答案 1 :(得分:2)

mybatis配置上的某些措施可以处理这些情况,

1)将fetchSize设置为相当大的数量。我将fetchsize设置为1000

2)不检索和映射所有列(仅映射必要的列减少了时间)

3)使用嵌套连接而不是嵌套选择。