CHAIN&SETLL什么时候通用?
当判断一个key是否存在时,chain和setll好像都可以实现...
key chain file 30(HI)
or
key setll file 30(eq)
这里,chain和setll是完全等价的么?
对于chain,*in30=*off表示找到key,
对于setll呢?*in30=*on是代表找到key么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
如果等价的时候那只要用CHAIN就可以了
CHAIN 始终只可以找到第一条跟KEY值相等的记录,无论你CHAIN多少次
SETLL+READE用在和循环配套使用,从第一条跟KEY值相等的记录读起,可以读到所有等于KEY值的记录,如果PF中有多条等于键值记录的话
前面有人说过SETLL后可以用READE读到,而CHAIN后在用READE读可能就读不到
这是因为当PF中只有一条等于键值的记录
SETLL 相当于光标移动到第一条等于键值记录的地方,然后用READE读取(到此为止的操作可用CHAIN代替,不同的是前者I/0操作两次,用CHAIN只是一次)
如果CHAIN后在用READE的话,就相当于,SETLL+READE+READE ,如果PF中只有一条等于键值记录那么CHAIN+READE之后就需要读第二条等于键值的记录,当然找不到
CHAIN(N),然后READ应该可以吧
setll 后面 read会成功
但是 chain 之后 read 不一定成功,自己好好想想为什么,就懂了。
如果你只是为了判断是否存在的话,那就是等价的。
区别是:CHAIN是定位和读取。
SETLL只是定位,读取的话要结合READ.
不对之处,希望指正。:wink:
Thanks.
本帖最后由 zhangv520 于 2010-06-13 14:58 编辑
*OFF是找到了!*on是没有找到! SETLL将游标定位到所有记录之前
回复 3# nolater
chain没找到才为*ON,楼主说的是对的
chain 找到时 指示符才亮,你这里说反了
是的,都可以,判断KEY是否存在时,SETLL的效率更高。
setll 目前也是SQL没办法取代的一种操作。