当前位置: 代码迷 >> Sql Server >> 感觉odbc性能仅稍逊于oledb(ADO),该怎么解决
  详细解决方案

感觉odbc性能仅稍逊于oledb(ADO),该怎么解决

热度:421   发布时间:2016-04-24 09:01:10.0
感觉odbc性能仅稍逊于oledb(ADO)
    由于某种原因,我长期使用sybase数据库进行CS开发。
  以前,一直使用odbc数据源,然后使用ADOConnection进行连接,后来,发现sybase提供了专门的oledb驱动,就直接使用sybase oledb provider 8.0进行连接。
  现在开始测试,从服务器取回30个字段(无blob和text字段)的3000条记录,用adoquery显示在dbgrideh中。显示前adoquery.DisableControls,之后EnableControls
  通过比对,结果还是没有想像的好:
  1、将adoquery的cachesize设置为500,光标位置cursorlocation设为客户端光标clUseClientcl,其它为默认设置:[/b]  odbc取回全部数据,时间为23秒,oledb为18秒;
  2、将adoquery的cachesize设置为1,cursorlocation设为UseServer,其它为默认设置:
  odbc取回全部数据,时间为6秒,oledb为2秒。
  odbc比较古老,是采用c编写的一组通用数据库调用API函数,oledb是更先进的技术,采用com技术,按微软的说法,比odbc更快,更高效。
   问题是,现在大家都普遍使用delphi的ado组件,这个是对微软ado技术的再次封装。在dlphi中当使用odbc,是使用了ado组件加odbc技术,而当使用oledb,则是使用了比较纯粹的oledb技术。
   从实际测试看,在delphi通过ado组件来使用odbc和oledb,性能差别不大,虽然将客户端光标改为服务器光标,oledb性能提升比odbc要明显,但这种方式会损失客户端光标的一些方便性能,如统计记录数、排序等,而且ehlib的滚动条将失去作用。
  我只对sybase数据库进行了测试,估计其它系统也差不多吧。

------解决思路----------------------
使用 ODBC 多了一个动作,就是去配置 ODBC ,虽然很简单,这个东西出现的太早了,当时也没有别的方式,有了 OLEDB 就方便多了,尤其是在 CS 应用中,至于速度问题,当时有了ODBC ,就相当牛 X 了,现在选择更多了。
  相关解决方案