精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Powerbuilder>>PB中使用注册表技术>>[ 各执己见的讨论 ]>>Re: PB中游标问题---我的看法!(1)

主题:Re: PB中游标问题---我的看法!(1)
发信人: edison()
整理人: edison(1999-10-21 01:44:39), 站内信件
下面是我的一些观点:

    首先,确切的说使用光标是容易造成死锁,同时影响性能。当然不是一定死锁,

还要看你的具体的 SQL 的写法。


    第二,select 语句的光标他会将正在读的数据所在的页加上共享锁。这一点我
                                     ~~~~~~~~~~~~~~~~
们已达成共识。但是你说共享锁不会造成死锁。我想这是关键之处。共享锁往往是造

成死锁的源泉。假设有个事物A要修改一个数据,那么事务A就必须获得独占锁。获得独

占锁的前提是不能存在共享锁。因此如果你在你的光标的循环体里写了大量的脚本,那

将使得事务A要等待很长时间才能获得。因此,这就会影响性能。再则,如果你的光标

里的脚本还需要得到其他数据页的独占锁,刚好是这数据被事务A占据了(假设A也是光

标),显然这将造成死锁。

    所以说千万不要以为共享锁不会造成死锁,共享锁往往是死锁的源泉。


    第三,访问数据的效率问题。你说5000条纪录没问题,这个我不太清楚,但是我在

《SQl Server 6.5 开发指南》一书上看到利用光标访问12条纪录却用了 0.8 秒,这应

该是一个很慢的速度才对。而且 ilike 也指出在《sql server 6.5 技术内幕》一书中

提到光标会带来许多的附加操作,会影响速度。


    第四、至于那些update 用的光标估计不用多说,肯定出毛病的几率更大!


    当然以上说的都是光标的弊病,关键看怎么写这个光标,写得好也不会出现什么

大问题。不过我个人还是认为使用光标倒不如将数据检索的 DW 或 DS 中这样操作起来

更方便!省得说不定那段SQL与那段SQL发生冲突!


最后再推荐一本书:《SQl Server 6.5 开发指南》也是一本很好的书。经过我的对比

在《sql server 6.5 技术内幕》很多没有提到的这本书都讲到了。而且这本书我觉的

深度比《sql server 6.5 技术内幕》要深一些。不过这本书也有一点不好,就是翻译

的不好,许多地方需要仔细揣摩才能明白。总的来说两本说都不错。而且这两本应该

很好买的!

Ok, Good luck!

【 在 pthinker (Thinker) 的大作中提到: 】
: 看了前面的文章,讨论到游标的问题,有几位认为不宜使用游标,
: 这里我有不同的看法!
: 1。 我自己的系统大量使用游标,丝毫没有觉得系统资源消耗大,且
: 非常方便。
: 2。 游标的使用与后台的DBMS有关,不同的数据库对游标的使用略有区别
:     ,一个客户端同时打开的游标数目,与数据库参数的设置有关!如果
:    打开的游标数目设置不够,则会出现问题。有些数据库支持游标的双向
:    移动,大多数只能想下滚动。
: 3。游标是OPEN 时瞬间的表的快照,使用的是共享锁,不会造成死锁,除非
:    记录已经被使用   排它锁了。
: 4。游标的效率与构成的SQL语法有关,游标返回的数据不要过多,过多就
:    失去了使用游标的意义。我人为返回5000条以下数据才有使用游标的意义


--
谢谢没有在 "将本文章寄一份给原作者" 处打勾, 再次感谢!

※ 来源:.网易 BBS bbs.netease.com.[FROM: bbs.szptt.net.cn]

[关闭][返回]