请问使用游标会有什么隐患

只听别人说使用游标不好,但不知道为什么不好,请大家帮助解答,谢谢~~
...全文
365 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 appleller 的回复:]
要不举个例子大家来看看吧!
[/Quote]

http://topic.csdn.net/u/20091017/21/dbe5ac2a-a006-46a3-811e-1b4f6798e897.html
appleller 2009-10-27
  • 打赏
  • 举报
回复
要不举个例子大家来看看吧!
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
----楼主:还不结帖?会有“隐患”的!
onefunnyday 2009-10-20
  • 打赏
  • 举报
回复
q85958341 2009-10-19
  • 打赏
  • 举报
回复
引用llj0209013贴内容

二、不要使用游标
让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令?这意味着如果你的游标有10000条记录,它将执行10000次SELECT!如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作,那将有效率的多。
初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。
我曾经用T-SQL重写了一个基于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到一个不称职的程序员究竟在干了什么!!!
我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL无能为力。
我再重新提醒一下:使用游标没有好处。除了DBA的工作外,我从来没有看到过使用游标可以有效的完成任何工作。

luoyoumou 2009-10-18
  • 打赏
  • 举报
回复
----------楼主:请去看看:到底是游标的速度低,还是嵌套子查询的速度低!
http://topic.csdn.net/u/20091017/21/dbe5ac2a-a006-46a3-811e-1b4f6798e897.html?17537
dmdwww 2009-10-13
  • 打赏
  • 举报
回复
少量數據可以使用,但是大批量數據建議不要使用,可以將要循環的數據放在臨時表中,用序號代替.
Rotel-刘志东 2009-10-13
  • 打赏
  • 举报
回复
数据量大的时候效率低。
luoyoumou 2009-10-10
  • 打赏
  • 举报
回复
--楼上就就属于那种:以偏概全的人,
--认为游标不好,是因为你对游标产生恐惧,当然就用不好了,执行起来当然效率就低了...

--当然:也许你的问题本来就不适合用游标,有更好,更高效的方法,干嘛不用更好、更高效的方法呢?
冰岛男孩 2009-10-10
  • 打赏
  • 举报
回复
mark
超级大笨狼 2009-10-10
  • 打赏
  • 举报
回复
以前有过教训:
400万用户做题目,寻找匹配程度,
利用游标的结果就是下班按下去执行,早晨来看结果。

后来改到数组里去计算,只需要1秒钟。

道理很简单,数据库再强大,也毕竟是文件,不是内存,涉及到大量的IO
  • 打赏
  • 举报
回复
游标对于拼一些特殊的报表还是很方便的,有时候不管你的sql如何嵌套都查不出想要的结果这个时候就要考虑游标了
haochin 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guguda2008 的回复:]
基本上写游标就是思路比较容易写清楚,小数据量下很灵活,我是这么认为的。
[/Quote]

实在话。
要是批理语句能轻松写出我也不会用游标。
但是有此复杂玩意,不会弄批量的,就只能用个游标来循环了。

毕竟写程序的对循环再熟悉不过了/
华夏小卒 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 luoyoumou 的回复:]
--问题一出来,第一次想到的就是:能用SQL语句的就尽量用SQL语句,从来不去考虑有没有其他的办法,让其效率更高,这不是固执是什么?
[/Quote]
这话说的还让人信服
luoyoumou 2009-10-10
  • 打赏
  • 举报
回复
--问题一出来,第一次想到的就是:能用SQL语句的就尽量用SQL语句,从来不去考虑有没有其他的办法,让其效率更高,这不是固执是什么?
华夏小卒 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 luoyoumou 的回复:]
--没有“攻击”的意思,
--在具体问题面前,你就会知道,看似“简单”的几行SQL语句,在“效率”面前,竟是如此的不堪一击!
[/Quote]

其实我早就看出来,你这个人就这样,几个马甲都这样,性格如此,说话习惯性的去挑逗别人。可能是我多心了。

讨论问题就讨论问题,你不同意就不同意,干嘛非要加“是那些思维比较固执的人认为”
,估计你在生活中说话得罪过不少人

[Quote=引用 4 楼 luoyoumou 的回复:]
--效率低,是那些思维比较固执的人认为,我可不这样认为,
--游标用得好,有时候比多层嵌套子查询的效率要高很多、很多、很多.............
[/Quote]

luoyoumou 2009-10-10
  • 打赏
  • 举报
回复
--没有“攻击”的意思,
--在具体问题面前,你就会知道,看似“简单”的几行SQL语句,在“效率”面前,竟是如此的不堪一击!
7761098 2009-10-10
  • 打赏
  • 举报
回复
不好意思啊,绝对没有攻击的味道

只是当时做项目的时候被老大训的惨了,心里有了阴影

大家只是技术讨论,不涉及任何其它哦
华夏小卒 2009-10-10
  • 打赏
  • 举报
回复
我是无语自以为是,喜欢攻击别人的样子
7761098 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 luoyoumou 的回复:]
--呵呵:具体问题,具体对待,我就喜欢用游标,
--现在“无语”还好,哪天老板问你要速度的时候,复杂的子查询只会令你更“无语”!

http://topic.csdn.net/u/20091005/16/00ea7542-d5b3-46f6-9d34-81aa2d831643.html
[/Quote]

大家探讨一下也挺好的,其实这个帖子当时也看到了,不过直接的想法就是干吗不在外部应用里面实现呢?
.net或者java链接一下数据库直接循环几次hashmap也就做到了

觉得探讨sql的终极用法挺好,但是也不要所有东西都放在sql语句里了,毕竟sql只是一个脚本类语言,和外部的编程语言还是有差距的
加载更多回复(14)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧