我的看法,
上面的测试结果并不能说明任何问题,就像一个座者的的人和一个站着的人比高低一样,
我们先来了解一下,这三种数据库访问机制的区别所在
对Sybase来说
在BDE中执行查询仅仅是打开了一个游标而已,只取回很少量的记录,
游标在取回所有的数据之前,处于打开状态,并在所查询的数据表上加了
一个查询锁,查询锁是级别很低的锁,它只会影响特定的数据库操作,
譬如,数据更新update,和数据删除delete,但也不是说必然会阻止上述的操作,
只有上述的操作可能会影响到多条记录时,才会被阻止,什么叫可能会影响到多条记录
呢,众所周知,主键是不允许重复的,如果在更新或删除的条件中以主键作为更新条件,
那么,受影响的记录绝对不会超过一条,那就肯定不会被阻塞,所以使用主键更新方式,
是避免查询锁影响的最好的一个办法,
另一种办法是,查询的游标打开之后,调用FetchAll读取所有记录到本地,这样游标锁就
会失效,当然也就不会影响别的数据库操作了,但是如果查询的记录很多,这一个FetchAll
的操作可能会花很长的时间(取决于网络速度),我们都知道,对大型数据库来说,
打开一个查询只会占用很少的时间,但传送数据却要花费很多的时间,
例如,我曾经打开一个5000条记录的查询,查询不到1秒钟就能够完成,
但传送所有记录到客户机却花了20多秒钟,这也正是ADO所花时间最长的原因,
因为,ADO组件使用的游标默认是客户端游标,也就是说把所有记录取到本地,
然后在本地建立游标,如果你把游标类型改为服务器端,再测试一下,看看有多大区别
这就是,BDE只取回了少量的记录,而ADO却提取了所有的记录,做的事情不同,、
当然没有可比性,
你可以在BDE打开查询之后,调用FetchAll 或者读取RecordCount,然后再把所花的时间
和ADO进行对比
你是怎么用ADO驱动访问Sybase的呢?能给我发一份吗?