本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


Blog信息
blog名称:
日志总数:15
评论数量:30
留言数量:0
访问次数:94716
建立时间:2006年4月26日




Hibernate:Query.list 与 Query.iterate 的区别
读书笔记

NaddyLee 发表于 2008/1/25 17:03:19

list: 结果存入缓存,但不从缓存里面取;查询时属性连同id一起找出来,只有“一句”select;  iterate:结果存入缓存,并在缓存中查找结果;查询时先找出所有的 id,然后根据 id 到缓存里面查找,如果没有命中,再到数据库中查找该id对应的其他属性。可能会有多行 select。 分页:firstResult 与 maxResult 的影响。Oracle:支持 rownum <= ? 的写法,因此在返回的结果集大小上对 list 和 iterate 都是一样的。但 maxResult 比较大时对使用 list 较为有利(不考虑缓存),因为 iterate 是要按 id 进行多次查找的。    对于不支持部分结果集的数据库,必须返回所有结果(?)。这个时候,list 可能会消耗大量的内存并导致效率降低。iterate 因为只是 返回所有id,相对较好。    不过如果是大数据量的应用,应该还是要用支持部分结果集的数据库。 如果使用二级缓存且缓存命中率较高(数据经常使用,并且较少更新),此时可以使用 iterate。 一个简单的测试结果: 查询某对象,共1000个记录,测试 5 次,每次分别取 10、20、50个结果,平均访问时间如下(ms)。数据库Oracle,无二级缓存   Query.list   10 20 50 1 89 94 266 2 143 92 255 3 106 106 106 4 293 150 104 5 151 167 104   Query.iterate   10 20 50 1 273 390 403 2 120 311 407 3 270 399 253 4 196 306 250 5 275 153 257


阅读全文(7488) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.030 second(s), page refreshed 144794860 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号