优化ADO的执行效率

转载 2004年07月22日 17:12:00

优化ADO的执行效率

 

  下面是使用ADO时程序员应该知道的规则。只要程序员了解并且适当地使用
在应用系统中,那么让ADO和ADOExpress拥有良好的执行效率并不是困难的事情:

1) 尽量找到真正的原生ADO和OLE DB驱动程序。尽量不要使用ADO For ODBC驱动程序,
   因为这种架构使用在一些数据库时会发生不正常的执行状况,也比原生ADO和OLE DB
   驱动程序来得慢一些。

2) ADO驱动程序的品质大大地影响了应用系统的执行效率,因此,你应该为你的数据库找
   一个良好的ADO驱动程序。

3) 尽量使用客户端的Cursor Location,并且只存取应用程序真正需要的数据到客户端,
   使用少量、多次的方式存取数据。使用少量、多次的方式存取数据不管是对于主从架构
   或分布式多层应用系统都是很好的方式。特别是对于Internet/Intranet和电子商务应用
   系统来说,使用这种方式可以确保应用系统能够在许多用户同时使用的状况下仍然保有
   合理的执行速度。

4) 适当设定CacheSize属性值。这是一个绝对不可忽略的设定,它的重要性仅次于
   Cursor Location。虽然在前面讨论的内容中我们可以发现设定CacheSize接近
   1000左右可以得到最好的效率/空间比,但是必须考虑当应用系统同时被许多用户
   同时存取时,在一瞬间网络会传递的数据量有多大。因此你可能必须根据你的应
   用系统的执行状况来适当地减少CacheSize为100 ~ 1000之间的数值。

5) 许多讨论如何优化ADO的文件都会建议使用存储过程,因为这些文件都假
   设你只会使用MS SQL Server。但是不管使用什么数据库,如果可以的话,那么对
   于需要处理大量数据的工作,使用存储过程绝对可以增加ADO应用程序的执行效
   率。因为在这种情形下,存储过程可以让这些大量的数据不传递到客户端,而是
   直接在数据库中处理数据,这可以避免造成网络严重的负荷。即使你不想使用存
   储过程,因为你可能会使用不同的数据库,对于一些经常会执行的工作,至少也
   应该使用Prepared ADO/ ADOExpress组件,这样也可以增加应用程序的执行效率。

6) 对于不会回传结果数据集的工作,例如使用Update、Delete等修改大量数据
   的工作,可以考虑结合存储过程和ADO的异步执行模式。这样可以大大增加ADO
   应用程序的执行效率以及减少ADO应用程序的反应时间。

7) ADO的Recordset对象,或ADOExpress的TADODataSet、TADOQuery和
   TADOTable组件虽然都可以使用Select的SQL命令存取数据,并且让用户修改数据
   再更新回数据源中。但是,如果你正在开发的ADO应用程序会执行大量的数据修
   改的工作,那么你应该使用数个不同的TADODataSet、TADOQuery和TADOTable
   组件。其中一个用来选取用户需要的数据,并且使用其他的TADODataSet,
   TADOQuery和TADOTable组件来执行Update和Delete等的SQL命令,这样可以增加
   ADO应用程序的执行效率。

8) 本项和第7项有关,即当你使用ADO开发分布式多层应用系统时,尽量设
   定TDataSetProvider组件的Resolve To DataSet为True。让ADO本身来处理数据的修
   改,而不要使用MIDAS的SQL Resolver,因为ADO可以更好地处理数据修改的数
   据。但是请注意,由于ADOExpress目前有一个臭虫,因此在分布式多层应用系统
   中不要使用TADODataSet、TADOQuery和TADOTable组件来执行Update和Delete
   等的SQL命令。请直接使用执行Select SQL命令的TADODataSet、TADOQuery和
   TADOTable组件来执行修改数据的工作。

9) 尽量使用Optimistic和BatchOptimistic这两种类型的LockType,因为它们不
   但会降低系统锁定的资源,也可以增加ADO应用程序的执行效率。

10) ADO的Batch Update模式和BDE/IDAPI的CacheUpdate非常类似,不管是
    用在主从架构或Internet/Intranet及电子商务应用系统中都可以增加ADO应用程序
    的执行效率。因此程序员应该尽量使用这种模式来开发ADO应用程序。

11) TADODataSet、TADOQuery和TADOTable组件的MarshalOptions控制了客
    户端修改的数据如何传递回OLE DB Provider或数据源进行更新的工作。在分布式
    多层应用系统和Internet/Intranet及电子商务应用系统中我们绝对不希望传递任何多
    余的数据,以避免浪费网络资源。因此适当地设定MarshalOptions属性值为
    moMarshalModifiedOnly也可以增加应用系统的执行效率。

12) 对于和图形用户接口有关的ADO应用程序,例如,如果需要在TDBGrid组
    件中显示大量的数据,那么不要忘记我们早已熟知的技巧,暂时关闭数据感知组
    件和ADO存取组件之间的关系,等待数据存取的工作完成之后再启动连接,那么
    将可以大大增加图形用户接口响应用户的效率。这就是说,当应用程序要结合大
    量数据存取和图形用户接口时,不要忘记调用Disable Controls和Enable Controls这
    两个方法。

 

Delphi中ADO存取效率的探讨

CacheSize 默认1,需要修改成1000 异步执行也可以提高效率:AsyncExecute
  • xiuzhentianting
  • xiuzhentianting
  • 2015-09-05 12:46:25
  • 329

ADO教程(执行带参数存储过程)

由于最近项目上要使用ADO访问数据库,而网上又没有非常完整的帖子,干脆摸着石头过河来总结一个ADO的使用;首先不得不说ADO的使用率并不是很高 1.ADO是微软提供的访问各种数据库的统一接口,是对底层...
  • liverpool_deng_lee
  • liverpool_deng_lee
  • 2017-05-25 16:07:42
  • 729

优化 SQL SELECT 语句性能的 6 个简单技巧

SELECT语句的性能调优有时是一个非常耗时的任务,在我看来它遵循帕累托原则。20%的努力很可能会给你带来80%的性能提升,而为了获得另外20%的性能提升你可能需要花费80%的时间。除非你在金星工作,...
  • Z1XpIYDj9sn
  • Z1XpIYDj9sn
  • 2018-01-26 00:00:00
  • 135

运用ADO.NET对象优化数据查询代码

毫无疑问,ADO.NET 向人们提供了一种功能强大、仿真数据库的对象模型,它可以将数据记录保存到内存中。尤其是ADO.NET 的 DataSet 类,它不但在功能上相当于数据库表的集中存储器(cent...
  • fzzf
  • fzzf
  • 2005-11-18 00:56:00
  • 612

提高ADO访问SQL Server性能的优秀经验

  • 2013年01月10日 11:04
  • 56KB
  • 下载

提高ADO性能的优秀经验

一、概述   “性能”这一术语有着几种不同的、差异微妙的含义。当人们谈到某个东西性能多少好时,他们想要表达的意思可能就是在一定的时间之内它完成了多少工作。例如,一个性能好的发动机运行起来更稳定,产生的...
  • yuchenglong
  • yuchenglong
  • 2007-04-01 11:17:00
  • 537

如何提高数据库系统访问效率[转帖]

目前个人认为要提高数据库访问的效率可以从以下几个方面来考虑:  1:数据库设计阶段对数据进行优化,包括索引,视图,数据仓库等 来提高数据库数据访问的效率。  2:从对数据库访问方式来考虑。包括RDO,...
  • ivanlovetracy
  • ivanlovetracy
  • 2005-02-12 21:10:00
  • 1275

ADO CacheSize的疑问

ADO CacheSize的疑问 在看李维Delphi.5.X.ADO.MTS.COM+高级程序设计篇 第4章中说在Client-Side Cursor 是,设置CacheSize 是有效果, 实际测...
  • zhaodog
  • zhaodog
  • 2010-12-06 21:41:00
  • 669

优化ADO的执行效率

优化ADO的执行效率     下面是使用ADO时程序员应该知道的规则。只要程序员了解并且适当地使用在应用系统中,那么让ADO和ADOExpress拥有良好的执行效率并不是困难的事情: 1) 尽量找到真...
  • vvvvvvvvvvvvvvvvvvvv
  • vvvvvvvvvvvvvvvvvvvv
  • 2004-07-22 17:12:00
  • 1401

常用优化sql语句执行效率的方法

项目中优化sql语句执行效率的方法: 1)尽量选择较小的列 2)将where中用的比较频繁的字段建立索引 3)select子句中避免使用‘*’ 4)避免在索引列上使用计算、not in 和 ...
  • u011341352
  • u011341352
  • 2015-10-24 21:40:16
  • 2142
收藏助手
不良信息举报
您举报文章:优化ADO的执行效率
举报原因:
原因补充:

(最多只允许输入30个字)