您的位置:首页 > 数据库 > SQL

Hibernate性能调优心得

2011-07-27 11:04 267 查看
前几天查看后台的日志时,发现常出现Hibernate的警告信息:

WARN (org.hibernate.hql.ast.QueryTranslatorImpl:328) - firstResult/maxResults specified with collection fetch; applying in memory!
  在中文Google上搜了搜,没有找到什么有用的信息,之后在英文的Google上搜了一下,出了很多介绍这方面的文章,写的最好的,我觉得是这篇文章,有测试用例来说明一切:http://java.dzone.com/articles/hibernate-tuning-queries-using?page=0,0
  我大概总结一下:在查询一对多关系数据,后面会用到“多”的数据。数据量比较大的时候(从数据库取500条记录以上),用fetch join比较好,Hibernate官方的文档也说了,它会只执行1条SQL语句。但是如果用分页查询时,比如一次才取50条数据时,不用fetch join要快,因为如果用了fetch join后,hibernate并不能在数据库进行分页,会把所有数据库到内存中,然后分页,当然性能 会差的很远(所以会报一个前面我写的警告信息)。这时用延时加载比如快,这时还可以更加优化,通过指定batch-size的大小,来批量从数据中读。  通过自己的测试,光是Hibernate发出的SQL语句就少了很多。之前我用Fetch join用分布时有200多条Sql语句产生,不用fetch join时只有23条了,再加了batch-size优化后只有16条sql了。所以要对不同的情况,进行不同的优化,才能让性能最佳!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息