CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  产品/厂家 >  应用性能管理

为什么不使用游标比使用游标要快?

楼主funcreal(为中华之崛起而编程)2006-03-13 09:27:09 在 产品/厂家 / 应用性能管理 提问

我想知道的是当应用程序访问数据库时,使用游标和不使用游标时,数据库都做了什么,都耗费了哪些资源?  
   
  在java中,Statement   st   =   conn.createStatement   (ResultSet.TYPE_FORWARD_ONLY,   ResultSet.CONCUR_READ_ONLY);//结果集只能向前滚动,不能自由定位行。我理解的是不使用游标。  
                  while   (rs.next())   {  
                  }  
  ,每执行一次循环,虚拟机内存就增加一点。应该是访问了一次数据库。  
  -----------------------------------------------------------------------------  
  如果:Statement   st   =   conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,   ResultSet.CONCUR_READ_ONLY);//结果集可以自由定位。假如设置fetchSize=100。  
                  while   (rs.next())   {  
                  }  
  则第一次执行rs.netx(),虚拟机内存就消耗约100个行大小,从内存中遍历完这100行后,再从数据库取100行。  
   
  在以上两种情况下,似乎总是第一种效率高。请问这两种情况下,数据库都做了怎样的工作?第一种情况下,应用程序是如何从数据库中取数据的,游标又为何会慢?对于数据库来说,使用不使用游标对系统内存有何不同的影响? 问题点数:50、回复次数:3Top

1 楼ChenZhi_cz(潜水艇)回复于 2006-03-13 15:40:35 得分 30

你的理解有误!  
  不管哪种方式,对数据库而言,都是用了游标,只是游标的类型不同  
  第一种情况下,游标只向后移动,数据库只关心游标的当前位置,处理的时候简单加1  
  第二种情况下,游标可以自由定位,所以数据库需要记录游标的当前位置,表中可以使用的记录的条数,根据游标移动的方向,计算应当检索的数据的位置,这样当然比第一种慢得多!  
   
  帮助文件里关于游标参数的说明写的很清楚Top

2 楼funcreal(为中华之崛起而编程)回复于 2006-03-16 08:30:53 得分 0

那为什么fetchSize在第一种情况下没有作用呢?  
  如果都是用的游标,我觉得第一种情况下也可以利用fetchSize来提高效率。Top

3 楼humanity(城市边缘的狼)回复于 2006-03-18 16:21:16 得分 20

fetchSize   一次预抓取的尺寸。  
   
  不是一共只抓取。  
   
  rs.next()   是问   Driver   还有数据么?  
  如果还有就返回   true   ,   那么不敏感的滚动结果集可以考虑缓冲,并且预抓取你要的行数以减少网络通讯量。  
   
  第一种情况可能是每次都产生   Socket   通讯而不缓冲,所以   fetchSize   也就没有实际意义了。Top

相关问题

  • 游标使用
  • 游标使用?
  • 游标的使用
  • 游标的使用
  • 大家探讨一下,为什么不推荐在sybase中使用游标?
  • 为什么游标会慢?
  • 新人提问:为什么要使用游标变量?直接使用游标的名称好像也可以啊!有何不同?
  • 游标使用的问题
  • 游标使用问题
  • 请教游标的使用?

关键词

  • 数据库
  • 内存
  • 数据
  • 游标
  • fetchsize
  • 使用
  • 抓取
  • 情况
  • resultset
  • 结果集

得分解答快速导航

  • 帖主:funcreal
  • ChenZhi_cz
  • humanity

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo