精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Powerbuilder>>PB中使用注册表技术>>[ 各执己见的讨论 ]>>Re: PB中游标问题---我的看法!

主题:Re: PB中游标问题---我的看法!
发信人: ilike()
整理人: edison(1999-10-21 01:44:13), 站内信件
为了说明cursor的危害,本版主不辞劳苦,亲自录入, 因为篇幅太长,我只能节
选,这本书是一本非常非常好的书。
以下引自《SQL Server6.5技术内幕》,该书作者即为SQL Server开发组负责人,
应该算是权威吧,看看专家对随便使用光标是如何痛心疾首的,这本书还有几个
例子,详细演示了使用光标所带来的复杂性以及如何大量的占用资源。

所提到的ISAM,指的是顺序的,逐行的处理的数据库系统,如dbase ,access.
引自第11章 光标
11.3光标和ISAM
这一节的内容非常重要!
在往下进行之前,你应懂得有关光标用法的一些关键内容。不要让光标把SQL Se
rver变成一个网络ISAM。
如果你阅读了本书第1 章中SQL SERVER的发展史,你可以回想起,SQLSERVER最初
的宏伟计划是:要成为ashtom-tate的dbaseIV的一个更高性能的后端。Dbase实际
是一个面向记录的、类似ISAM的(也就是,它进行顺序的、逐行的处理)数据管
理系统(它不是以集合为基础的)。那时候,SQLSERVER还没有使用光标,这就使
一个困难的任务更加困难了。最初计划想使面向记录的和以基础的两个系统完全
兼容,并且可以天衣无缝地交换。这个计划一开始就注定了它的灭亡,这是两个
完全不同的模型。如果当初的SQLSERVER具有现在那样丰富的光标模型,那么光标
从一开始就会频繁地用来创建dbase的前端。但是当时没有这个,我对此并不感到
遗憾。因为把这种阻抗失配明显地暴露出来没什么不好。这就迫使人们重新检验
基础目标,从而彻底修改我们的计划,这样还强调了使用户面向数据集合操作,
而不是像操作一个ISAM那样面向单个记录。如果那时光标已经存在,它们可能会
被滥用,结果会导致一个糟糕的SQLSERVER前端。
如果使用得当,光标可以成为一个重要的工具。然而,因为光标是面向记录的,
对于那些具有ISAM系统背景(例如IMS,DBASE,VSAM或access中使用的microsof
t Jet数据库引擎)的人,使用光标经常是很自然的。对于这些程序员来说,使用
光标将一个应用程序从一个ISAM系统移植到SQLSERVER中是很诱人的。这种移植可
以很快完成。但是,这也可能很快导致一个非常糟糕的SQLSERVER应用程序。在前
面说明的标例子中,对authors表的每一行很像是对authors文件进行ISAM操作。
这一示例光标的效率比起用单个select语句获取所有作者低一个数量级。每当我
听说有一个应用程序,一开始是ISAM系统的,正要准备移植到SQLSERVER上去,我
就表示忧虑。如果你需要做这种工作,那么就做一个深度移植,也就是说回过头
去查看应用程序的基本设计和数据结构,然后再做移植。而一个肤浅的移植只会
使SQLWER模仿一个ISAM。只有那些无意彻底做好移植,只想凑凑合合的程序员,
才会采用这种方法。
11.3.1光标:过多的命令和网络交通
光标通常在一个客户应用程序中编写,并且每个open和每个fetch实际上都是一个
单独的命令,要进行一个独立的网络对话。如果你追踪这些命令的话,你会发现
:由于所有这些嵌套的迭代都伴随着一系列的内循环,所以,命令的数量会变得
很大。
11.3.2光标:过量地使用服务器资源
11.3.3光标:不必要的长事务

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.184.155]

[关闭][返回]