| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
|
1 connection 1.1 pooling 在web application中,常常会出现同时有很多用户同时访问数据库的情况,而且asp中的对象作用域是页面级的,也就是 说,每个页面都要联接和断开数据库,岂不是会很慢?而且每个到sql server数据库的联接会带来37k的系统开销,怎么 办? 可能有人会想到用application和session来解决问题,但是,这是不可取的,如果用application,那么会出现多个用户同 时通过一个connection访问数据库的情况,虽然节省了建立连接的时间,但是访问数据库的速度就会变得非常慢。如果用 session,出现的问题就是,session超时怎么办?如果把session.timeout设得很大,那用户离开之后,连接还会保留一段 时间,也会带来额外的开销。 其实根本不用考虑这个问题,通过ole db访问数据库,它会替你解决这个问题,ole db有一个resource pooling,它会代 理你的连接请求,然后把别人刚用过的连接给你接着用。(具体机制不再阐述,其实我也没搞太明白,嘻嘻) 1.2 provider 可能没有多少人用过这个property吧,它的缺省值是msdasql,还有msidxs和adsdsoobject,但是在ado2.0(见vs98)和 ado2.1(见sql7)里面提供了一些新的provider: msdaora (ole db provider for oracle) microsoft.jet.oledb.3.51(ole db provider for microsoft jet( for access)) sqloledb(microsoft sql server ole db provider) 如果你所用的数据库是这些的话,用这些新的provider就可以不通过odbc而直接访问数据库,提高的效率就可想而知了。 2 command 2.1 commandtype 缺省值是adcmdunknown,ado会逐个判断你的commandtype,直到它认为合适为止,不建议采用。(在recordset.open和 connection.execute的时候也可以用) adcmdtext是照原样执行你的sql语句,但是如果你的sql language是以下几种的话,通过使用别的commandtype就可以提高 你的sql语句执行效率 objcmd.execute "select * from table_name", adcmdtext可替换为objcmd.execute "table_name",adcmdtable objcmd.execute "exec proceuure_name",adcmdtext可替换为objcmd.execute "proceuure _name", adcmdstoredproc 还有很重要的一点就是,如果你的sql语句没有返回记录集,如insert和update等,那么使用adexecutenorecords (ado2.0)可以减低系统开销(可以加到adcmdtext 和adcmdstoredproc上,如adcmdstoredproc + adexecutenorecords) 还有adcmdtabledirect和adcmdfile(ado2.0),我还不太清楚怎么用,adcmdfile可用于访问一个xml文件。 2.2 prepared 如果你需要重复的执行类似的sql语句,那么你可以预编译你的sql语句,提高的效率也很可观 objcmd.commandtext = "select spell from typer.wordspell where word = ? " objcmd.prepared = true objcmd.parameters.append objcmd.createparameter("word", advarchar, , 2) for i = 1 to len(strname) strchar = mid(strname, i, 1) objcmd("word") = strchar set objrs = objcmd.execute if objrs.eof then strnamesame = strnamesame & strchar else strnamesame = strnamesame & objrs("spell") end if next ''i = 1 to len(strname) 3 recordset 3.1 locktype 缺省是adlockreadonly,如果你不用修改数据,就不要改成adlockoptimistic之类的,否则也会减低速度和增加开销的 adlockreadonly > adlockpessimistic > adlockoptimistic > adlockbatchoptimistic 3.2 cursortype 缺省是adopenforwardonly,如果你只用movenext method,也最好不要改,速度影响140%左右 adopenforwardonly > adopendynamic > adopenkeyset > adopenstatic 3.3 cursorlocation 缺省是aduseserver,其实不好,它可以随时反映数据库服务器上的改动,但是系统开销很大,而且需要维持和数据库服务 器的连接,但是在数据库服务器和web server在一起的时候要快些。不过在adlockoptimistic的时候使我无法使用 recordcount等property。 使用用aduseclient的话,你可以对数据做再排序,筛选,shape等操作 如果对数据的实时性没有要求的话,尽量用aduseclient 4 其它 4.1 early bind 用asp这一点就不用看了,如果用vb的话 dim objconn as adodb.connection 比 set objconn = createobject("adodb.connection")要好 4.2 ado 2.1里的shape真是好玩 4.3 ado 2.1可以用objrs.fields.append来建立一个recordset 4.4 把recordset的一列数据直接变成一个数组来操作速度快一些,但是系统开销要大一些 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:优化-数据库 下一篇:将数据库中的数据通过client控件显示,有源代码 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 相关文章 | ||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||