今天看到一篇名为“SQL Server数据库开发的二十一条军规 ”的文章,其中里面有两点是关于游标的。小弟将其列出:
 二、不要使用游标
  让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令?这意味着如果你的游标有10000条记录,它将执行10000次SELECT!如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作,那将有效率的多。
  初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。
  我曾经用T-SQL重写了一个基于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到一个不称职的程序员究竟在干了什么!!!
  我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL无能为力。
  我再重新提醒一下:使用游标没有好处。除了DBA的工作外,我从来没有看到过使用游标可以有效的完成任何工作。
  十、不要使用服务器端游标
  与服务器端游标比起来,客户端游标可以减少服务器和网络的系统开销,并且还减少锁定时间。小弟有些困惑了。游标真的会影响执行效率吗?或者说在什么情况下使用游标最为合适?小弟写存储过程的时候感觉有时候必须要用游标,如果说游标影响效率的话,那有没其他更好的方法来解决?

解决方案 »

  1.   

    針對二、一般情況下是這樣.
    但是有時候很複雜的sql 語句,裡面嵌套了多個重複的sql字查詢,而且相應的字段上沒有索引,這個時候要做重遍歷.
    這個時候,就不如用 遊標 作一次遍歷 的效率高.
    針對十,書上講的是對的.
     
      

  2.   

    还有一个问题,小弟现在用的是SYBASE数据库,当我执行一个存储过程时,该存储过程有一游标,此时我如果中断执行的话会出现什么情况?会立刻跳出游标吗?