今天看到一篇名为“SQL Server数据库开发的二十一条军规 ”的文章,其中里面有两点是关于游标的。小弟将其列出:
二、不要使用游标
让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令?这意味着如果你的游标有10000条记录,它将执行10000次SELECT!如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作,那将有效率的多。
初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。
我曾经用T-SQL重写了一个基于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到一个不称职的程序员究竟在干了什么!!!
我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL无能为力。
我再重新提醒一下:使用游标没有好处。除了DBA的工作外,我从来没有看到过使用游标可以有效的完成任何工作。
十、不要使用服务器端游标
与服务器端游标比起来,客户端游标可以减少服务器和网络的系统开销,并且还减少锁定时间。小弟有些困惑了。游标真的会影响执行效率吗?或者说在什么情况下使用游标最为合适?小弟写存储过程的时候感觉有时候必须要用游标,如果说游标影响效率的话,那有没其他更好的方法来解决?
二、不要使用游标
让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令?这意味着如果你的游标有10000条记录,它将执行10000次SELECT!如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作,那将有效率的多。
初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。
我曾经用T-SQL重写了一个基于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到一个不称职的程序员究竟在干了什么!!!
我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL无能为力。
我再重新提醒一下:使用游标没有好处。除了DBA的工作外,我从来没有看到过使用游标可以有效的完成任何工作。
十、不要使用服务器端游标
与服务器端游标比起来,客户端游标可以减少服务器和网络的系统开销,并且还减少锁定时间。小弟有些困惑了。游标真的会影响执行效率吗?或者说在什么情况下使用游标最为合适?小弟写存储过程的时候感觉有时候必须要用游标,如果说游标影响效率的话,那有没其他更好的方法来解决?
解决方案 »
- 怎么行跨行?不想用函数
- 为什么我可以连上别人的数据库,而别人都连不上我的呢?
- 两个不在同一服务器的表能否进行连接
- 存储过程分页if..begin..else if...end出错
- 这段ASP查询写成储存过程怎样写?
- sql server 2008 分割字符串问题。求帮忙
- C# EXCEL 批量导入图片到SQLServer 问题
- 怎么才能让列不能重复啊 急!!!急!!!急!!!
- SQL SERVER和ORACLE在一台机子上能共存吗
- 问一个简单的问题^_^(存储过程的RAISERROR的错误消息如何换行)
- 执行 ALTER FULLTEXT CATALOG 时如果指定 AS DEFAULT 参数,会覆盖现有默认设置吗?
- 高分求一条sql语句
但是有時候很複雜的sql 語句,裡面嵌套了多個重複的sql字查詢,而且相應的字段上沒有索引,這個時候要做重遍歷.
這個時候,就不如用 遊標 作一次遍歷 的效率高.
針對十,書上講的是對的.