免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2286 | 回复: 2

熟悉Hibernate的来说说,这是什么道理? [复制链接]

论坛徽章:
0
发表于 2008-05-13 15:46 |显示全部楼层
三表关联查询,第一张表有41条记录,第二张表3400条,第三张表5600条记录,查询返回的结果集是一条记录,实例化一个bean对象。
每次查询所花时间都在1分30秒左右。将Hibernate输出的语句换用JDBC执行,所花时间不到1秒。Hibernate慢的不是一点半点啊。
将关联的表去掉一张(数据多的第二张或第三张),查询速度飞快,不超过10秒!
这是什么道理?

论坛徽章:
0
发表于 2008-05-14 15:16 |显示全部楼层
将Hibernate输出的语句换用JDBC执行,所花时间不到1秒

这里是用java的jdbc api代码运行,还是直接在数据库的客户端软件中运行sql语句?

查询返回的结果集是一条记录,实例化一个bean对象。每次查询所花时间都在1分30秒左右

是不是使用的“迫切加载”?改用“延时加载”试试看

论坛徽章:
0
发表于 2008-05-15 22:44 |显示全部楼层
本来 OR-Mapping 就是牺牲了性能! Hibernate做为OR-Mapping的代表,同样不能避免的就是性能的降低!
Hibernate的机制其实就是是通过配置文件将对象转化为SQL语句进行检索,当查询数据量较大时,hibernate其实是将已经和数据库做关联的对象一一检索了一边,从而降低的查询性能! 因为无论是查询 修改 还是 删除,其实都要必经查询第一步。查询性能的降低是Hibernate中尤其明显的!
而JDBC是通过SQL语句直接对数据库操作,过滤掉中间的O-R的关联,而且返回的是一个结果集(其实就是一张数据表,并不是一个个独立的对象),接下来的操作都是针对这个结果集的;所以速度上讲,JDBC查询的速度远远要高于Hibernate。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP