正文

提高VB访问数据库的效率2006-02-17 04:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/stef/10180.html

分享到:

  1.尽量使用事务处理更新数据库   VB的事务处理包括以BeginTrans开始,以CommitTrans或Rollback结尾的多条数据库操作指令。事务处理除了能很好的保证数据库的完整性以外。同时能大大提高数据库批量更新的效率。这是因为如果数据库更新操作没有使用事务处理,则每次Update操作都会引起数据库写盘一次。使用事务处理后,更新只在内存缓冲区内进行,执行CommitTrans时才将所有修改一次写回到磁盘中。  使用事务处理要注意一下几点:  (1)事务处理要有很完善的错误检查机制;  (2)因为VB在事务处理结束前对数据库使用了页面锁,所以在多用户环境中,如果事务被挂起,则其他用户将无法访问上锁的数据。  2.尽量使用代码分解Select检索操作  使用Select进行数据库操作固然简单易用,但如果将一些检索操作分解为等价的手工检索代码,则对数据库的检索速度将大大加快。分解的基本方法是对检索关键字段进行索引,利用Seek方法定位后,根据索引的数据库已经排序的特点,进行遍历查找。对于遍历范围不是很宽时,这种方法能几十倍的提高数据库的访问速度。  例如:Select * from person where vol= '123' and birth= #11-02-73# 分解成下面的操作后,访问速度可大大提高:  Table.Index= "vol"  Table.Seek "=","123"  if not table.nomatch then   while not table.eof    if table("vol")="123" then     table.movelast    else if table("Birth")= #11-02-73# then     '找到记录    end if    table.movenext   wend  end if  3.使用attach绑定数据库表  当使用ODBC连接MS SQL Server,Oracle和Sysbase之类的数据库服务器时,我们可以通过MS Acess的attach功能将服务器上的表绑定到MS Acess数据库中,因为MS Acess数据库能缓存数据库服务器上表的结构,当我们访问ODBC数据源时能提高系统的访问性能。  4.使用dbSQLPassThrough选项  连接MS SQL Server,Oracle和Sysbase数据库服务器时,使用dbSQLPassThrough选项可将命令直接发送给数据库服务器,从而减少中间件对命令的检查和解释,提高了数据库的访问性能。下例使用存储过程建立Dynaset:  dim mydb as databasedim myds as dynasetset mydb=opendatabase(..........)  '打开数据库  set myds=mydb.openrecordset("name",dbOpendynaset,dbSQLPassThrough,...)   使用dbSQLPassThrough的缺点是返回的记录集是只读的。  5.正确使用数据库访问对象Table  支持SEEK命令和索引,两者配合能最快的找到纪录。笔者曾经做过速度比较试验,都是检索10万个记录。Table用时3.5秒,支持读写操作,不支持SORT和FILTER,必须使用Index代替。对应于数据库中的物理表,增、删、改会直接影响数据库表。Dynaset用时9秒,最灵活的数据库对象,支持读写操作,是记录的动态子集。在ODBC中,写操作需要设定唯一性索引。支持SORT和FILTER。使用JOIN命令关联多个表时,只能使用Dynaset。Snapshot用时10秒,只能读不能写,不能加锁,不支持事务处理,不支持Edit、Addnew和Update方法。

阅读(2253) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册