数据库访问方式比较,那种会更快???(100分)

  • 主题发起人 主题发起人 chenxz
  • 开始时间 开始时间
C

chenxz

Unregistered / Unconfirmed
GUEST, unregistred user!
用一个select语句读取数据库(sybase),下面三种方式的时间为:
BDE:10毫秒
ODBC:120毫秒
ADO:621毫秒

大家讨论一下为什么是这样的结果。

另,只有用BDE方式时,数据库里会有共享锁,照成其他写操作堵塞,直到把query关闭,
而其他方式没有:(,有什么方法可以把锁去掉吗?
 
ADO对于:SQLSERVER来说,是比较好的。
但是:对于:SYBASE,ORACLE,INFORMIX,DB/2。。。
却,不是最好的。甚至于,不如BDE。
 
在SQLSERVER中也有这种情况。
BDE打开表的速度比ADO快,
但经常锁住记录。
 
ADO是Microsoft公司对OLE DB的包装,并主要针对其数据库
产品而开发的数据存取技术,对于别的数据库,可能性能并不怎么好。
而BDE是Borland公司开发的数据存取技术,它有许多方面完善了ADO的功能。
另外, Delphi 内嵌支持sysbase数据库,速度相对较快。
 
各种数据库引擎对不同的数据库支持程度都不同,所以导致了以上的结果
 
是呀,使用BDE连SYBASE比微软的ADO肯定好些,
除非使用SYBASE提供的OLE DB.
 
TO:chenxz 看情况用数据库了,相对中小企业来说 ,SQLSERVER足够用了,不过现在访问基本是
习惯了ADO了对了不知对于三层数据库有何高见,聊聊!
 
数据库引擎跟 数据库有很大的关系的。
例如:
ado 连接Oracle 的速度跟 BDE 差不多。
但是BDE有很多问题(eg。不能很好处理Oracle空值)

Ado连接DB2的话,我觉得是很多问题的,
可能是由于我没有能够找到好的驱动。
 
我作过一些简单的测试,基本结果如下:
MS的数据库(SQL SERVER/ACCESS)用ADO最快
ORACLE:用MS提供的OLE-DB连接比BDE慢非常多,dbExpress最快
INTERBASE:用IBExpress最快,dbExpress也很不错
其它数据库没试过。
 
打开的速度与参数设定有很大关系。
我想知道各位在进行测试时数据库控制的相关属性是如何设定的。
 
似乎和数据量的大小也有关系吧! 就如同现在的硬件,通常是看不到差别的,但是如果做图
..哈哈!
不同的环境会产生不同的结果。AMD 不也是怀疑测试的第三方对Intel做了优化吗!
我想这个测试的标准实在是太重要了!至少要考虑的因素蛮多的啊!

1.数据库平台 :Oracle MS-SQL InterBase Sybase
2.网络平台: 10M 100M 1000M 10000M ?
3.服务器的处理能力:PC : SERVER: (:是不是能出一道计算题考考计算机的计算能力?
4.程序的性能;
>>>

我能想到的似乎就这些了。

 
这问题不能一概而论,要分什么的数据库,在什么的软硬件环境下,他会有不同的结果。
InterBase在IBX下比在BDE下快,但在使用中总是有很多莫名其妙的问题出现,不知大家
有没有遇到。
 
MS 的用ADO。
其他的用BDE。
 
那么,如果我用BDE连SQL Server2000,可能会出什么问题?
这个问题是不是因为使用BDE连SQL Server造成的?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1320867
 
我的看法,
上面的测试结果并不能说明任何问题,就像一个座者的的人和一个站着的人比高低一样,
我们先来了解一下,这三种数据库访问机制的区别所在
对Sybase来说
在BDE中执行查询仅仅是打开了一个游标而已,只取回很少量的记录,
游标在取回所有的数据之前,处于打开状态,并在所查询的数据表上加了
一个查询锁,查询锁是级别很低的锁,它只会影响特定的数据库操作,
譬如,数据更新update,和数据删除delete,但也不是说必然会阻止上述的操作,
只有上述的操作可能会影响到多条记录时,才会被阻止,什么叫可能会影响到多条记录
呢,众所周知,主键是不允许重复的,如果在更新或删除的条件中以主键作为更新条件,
那么,受影响的记录绝对不会超过一条,那就肯定不会被阻塞,所以使用主键更新方式,
是避免查询锁影响的最好的一个办法,
另一种办法是,查询的游标打开之后,调用FetchAll读取所有记录到本地,这样游标锁就
会失效,当然也就不会影响别的数据库操作了,但是如果查询的记录很多,这一个FetchAll
的操作可能会花很长的时间(取决于网络速度),我们都知道,对大型数据库来说,
打开一个查询只会占用很少的时间,但传送数据却要花费很多的时间,
例如,我曾经打开一个5000条记录的查询,查询不到1秒钟就能够完成,
但传送所有记录到客户机却花了20多秒钟,这也正是ADO所花时间最长的原因,
因为,ADO组件使用的游标默认是客户端游标,也就是说把所有记录取到本地,
然后在本地建立游标,如果你把游标类型改为服务器端,再测试一下,看看有多大区别

这就是,BDE只取回了少量的记录,而ADO却提取了所有的记录,做的事情不同,、
当然没有可比性,
你可以在BDE打开查询之后,调用FetchAll 或者读取RecordCount,然后再把所花的时间
和ADO进行对比

你是怎么用ADO驱动访问Sybase的呢?能给我发一份吗?
 
说的很有道理,由于数据锁的问题,我现在是采用odbc的连接方式。速度还可以。
我也曾经用bde方式的fetchall,但当数据量大和网络慢时确实有问题。

ado的连接是用ado控件进行操作的,当然要通过sysbase client,而不是直接的ado连接。

 
Ado是发展的方向,
李维先生在他的Delphi5.x Ado/mts/com+中有详细的论术.
 
Ado是发展的方向
 
to:笑三少2002
请问兄台,你说的李维那本书在哪儿有下载呀
 
楼上的 知道了地址也告诉我一下
 
后退
顶部