Query的list与iterate方法

当创建查询Query后,

 

首先不讨论它们利用缓存的时候:
如果调用它的 list方法,将一次性把所查询的所有满足查询条件的结果都将取出组合成list集合放入内存,因此只用一条sql语句。但如果符合查询条件的结果很大时则容易造成内存益处。

 

如果调用它的iterate方法,此时暂时也只执行一条sql语句,该sql语句用来查询出所有满足查询条件的结果的id,即唯一标识符,将它们组成一个集合,而不会查询出结果记录的其他字段值。而当我们实际开始迭代该结果集时,每迭代一次,就根据正迭代结果的标识符再产生一条sql语句从数据库中取出相应的数据。因此这样有多少个结果就会产生多少条sql语句,如果再加上最开始查询id的sql语句,则如果结果集为n,则产生的sql语句为n+1条。如果当结果集很大时也可能产生内存益处,因此我们可以迭代一个元素后立即将其从缓存中删除(包括两级缓存),这样我们就可以缓解一下结果集比较大的情况,当然如果查询出的id集合足够大也同样会造成内存益处。

 

然后再来考虑它们利用缓存的情况:
list只能利用一级缓存,不能利用二级缓存,因此如果一级缓存中已经存在符合查询条件的结果则不再从数据库中取。
iterate可以利用一级和二级缓存,因此如果它们中已经存在符合查询条件的结果则不再从数据库中取。

 

有时候我们需要混合使用它们两,当我们第一次取值或需要修改值时可以利用list,这样可以减少sql语句执行的条数,而其他情况则可以使用iterate,因为可以充分利用缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值