sql语句:select 1 from towerload_info where FilesNames=''FC001MY1500KW19-20120801021848TJ'' and LoadSign=1
在navicat中执行时返回结果只需要100多ms,但在自己编写的程序中需要6s(ado),请各位帮忙看看是什么原因?

解决方案 »

  1.   

    100ms和6s是差别很大,单单Open应该不会相差这么大
    是不是ADO还执行其它事件,比如BeforeOpen,Afteropen,CalcFields,...等事件,都有代码新建一个工程试试
      

  2.   

    只有50几万条数据,应该不是语句的原因,非常想不通的问题是在navicat中运行为什么是正常的,唯一的不同是自己写的程序通过mysql的odbc驱动而已。
      

  3.   

    具体原因待查...不瞎说,只说下我自己曾经遇到过的事情。
    之前没用过MyODBC,就找了下了个用了有问题,然后重下了个 mysql-connector-odbc-5.1.5-win32.msi 用就好了。lz不妨试试看吧...
      

  4.   

    在数据库系统的ide环境和在使用ODBC的程序中,有一些速度的差异,但一般不会达到一个数量级,慢40%左右
      

  5.   

    这个应该是跟navicat自身机制有关。
      

  6.   

    用odbc连接本身就会慢一点,
    另外navicat软件应该对mysql的连接和查询有优化;个人感觉应该是用odbc的原因多一点;
      

  7.   

    ODBC本身就比较慢, 为什么不用ADO呢?肯定差不了这么多...
      

  8.   

    楼主试一下 select Count(*) from towerload_info where LoadSign=1 and FilesNames='FC001MY1500KW19-20120801021848TJ'
    这句语句的时间,如果非常短,试一下把你的AdoQuery.CursorLocation设置成clUseServer试一下查询记录的速度,不确定能解决你的问题.
    个人分析:
    50万条记录查询并全部复制到本地100ms完成有点悬,所以怀疑它用的分页或者就是这样,或者其他因为你select 1,固定数字,只要一个满足条件的记录数就够了,所以navicat有可能优化,不确定这一点。
      

  9.   

    navicat只有读取部分数据,显示出来
      

  10.   

    如果我没有猜错的话楼主在程序里使用的是循环的方式,改用SQL语句进接打开看。
      

  11.   

    对了 提醒我了 navicat默认是显示前1000条记录
      

  12.   

    navicat?没听过。这个sql返回多少条记录?虽然字段就是1.
      

  13.   

    我也发现了这个问题,同样的语句,navicat vs java hibernate,相差是有100倍,不知是什么原因
      

  14.   

    不过我想可能是这个原因:navicat一直是打开数据库的,而程序中需要先打开数据库,然后执行完毕再断开数据库。不过hibernate用的是连接池,也不应该差这么多啊