发信人: 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]
|
|