连接同一个sql6.5的数据库服务器,执行同样命令:
select ITEM FROM test where ITEM='ONE'
执行效率相差很多,这是为什么???
d1:tdatabase,q1:tquery
d2:tadoconnection,q2:tadoquery
运行以下语句(假设d1,d2已open)
var
start:dword
begin
start=gettickcount();
q1.close;
q1.open;
showmessage(inttostr(gettickcount()-start));  //只要几十毫秒
start=gettickcount();
q2.close;
q2.open;
showmessage(inttostr(gettickcount()-start));  //要一千多毫秒
end
请问一下这是为什么?李维的书上不是说ado效率高吗???

解决方案 »

  1.   

    我用两个button,button1中
    q1.open,q2.open连接
    button2中执行以上语句测试,就是这样!
      

  2.   

    我使用sql的跟踪工具,发现ado执行时执行了好多语句,且中间有新建立连接???
    select ITEM FROM test where ITEM='ONE'
    go
    --新建连接
    set textsize 2147483647 set ansi_defaults on set cursor_close_on_commit off set implicit_transactions off 
    GO
    SET NOEXEC ON select ITEM FROM test where ITEM='ONE' SET NOEXEC OFF
    GO
    --断开连接
    --新建连接
    set textsize 2147483647 set ansi_defaults on set cursor_close_on_commit off set implicit_transactions off 
    go
    SET FMTONLY ON select ITEM FROM test where ITEM='ONE' SET FMTONLY OFF
    go
    --断开连接
    why?可能时间就时花在连接上!
      

  3.   

    d1和d2的keepconnection属性均为true
      

  4.   

    正常来说,ado是要比bde快的。不过如果你数据量不是特别的大的话,几乎是没什么区别的。如果出现时间差异的话,估计是你没设置好。
      

  5.   

    bde速度快,但是设置麻烦,发布时太庞大。ado因为兼容性好,设置简单所以被广泛使用。bde确实要被淘汰了,但是被dbExpress,不是ado
      

  6.   

    ado 中间处理了不少程序员看不到的环节.
      

  7.   

    真正实战起来,ADO是很方便快捷的。
      

  8.   

    下面的为什么?
    create table test (id int)
    用adoquery查询如下语句
    1.select id(max,id) from test     //很慢
    2.select 6
      select id(max,id) from test    //就很快了,这是为什么
      

  9.   

    做了一个简单比较:adoconnection,adoquery,且运行前adoconnection已经成功连接数据库,
    aadoquery.connection:=adoconnection,
    以下的test为sql6.5数据库中的某张表,只有id字段,且记录数不超过3条,
    1.aadoquery.sql.text:='select id=isnull(max(id),0) from test'
    以下的6为随便的一个常数
    2.aadoquery.sql.text:='select id=isnull(max(id),0) from test select 6'
    同时执行以下语句:
    var
      start:dword;
    begin
      with adoquery do
      begin
        start:=gettickcount();
        close;
        open;
    //语句1显示的时间大概为2000左右,语句2显示的时间大概为100左右
        showmessage(inttostr(gettickcount()-start));
      end
    end
    前面两个语句的效率相差这么多,这是为什么,请各位高手帮忙!!!
      

  10.   

    #################################
    我用两个button,button1中
    q1.open,q2.open连接
    button2中执行以上语句测试,就是这样!
    ###################################要用两个BUTTON才行。这是系统处理内存时耗些时间。
      

  11.   

    如果执行某些存储过程时,BDE会报错,而ADO则不会