access数据库的ODBC和OLEDB打开方式的对比


性能对比:
                                         sql access    
                              oledb dsn oledb dsn
                    时间      18 82 62 99
查询1,000条记录: 100 150 2900 5400

显然,oledb链接方式相对于dsn有很大的优势.购买虚拟主机的小站,大多是php+mysql或者asp+access的组合,一般没有dsn数据源的配置,而且我们也不需要.同时mssql是一种昂贵的数据库,如果使用效率低下的access,我们应该尽量的减少数据库引擎的压力.我经常看见一些站点给出提示:数据库连接失败,显然,又是access出毛病了.

常用的连接access的办法:

oledb
openstr="provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath(db)
odbc
openstr="Driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.Mappath(db)

这两者在性能上也有一定的差别.下面是一个测试文件,对两者进行比较.

dim openmode,action,db,openstr,rs,conn
openmode=request.QueryString("openmode")
action=request.QueryString("action")
db="#niceidea.mdb"
set conn=server.createobject("adodb.connection")
if penmode="oledb" then penstr="provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath(db)
if penmode="odbc" then penstr="Driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.Mappath(db)
Dim strStartTime
Dim strEndTime
strStartTime = Timer ''''''''''''''''''''''''''''''''开始时间
''''''''''''''''''''''''''''''''反复打开数据库50次
if action="open" then
for i=1 to 50
conn.open(openstr)
conn.close
next
set conn=nothing
end if

''''''''''''''''''''''''''''''''移动记录集10000次
if action="move" then
conn.open(openstr)
set rs=conn.execute("select * from visitor")
for i=1 to 10000
rs.movenext
next
rs.close
set rs=nothing
conn.close
set conn=nothing
end if

''''''''''''''''''''''''''''''''反复打开记录集1000次
if action="getrs" then
conn.open(openstr)
set rs=server.CreateObject("adodb.recordset")
dim sqlstr
sqlstr="select * from visitor"
for i=1 to 1000
rs.open sqlstr,conn,1,1
rs.close
next
set rs=nothing
conn.close
set conn=nothing
end if
%>




数据库链接方式测试




'''''''''''''''''''''''''''''''' 加载完毕的时间
strEndTime = Timer
Response.Write ("运行处理时间: ")
Response.Write 1000*(strEndTime - strStartTime)
Response.Write (" 毫秒.")
response.end
%>





得到的数据如下:

odbc反复打开数据库50次:
6062.5 毫秒.
oledb反复打开数据库50次:
4601.563毫秒.
odbc移动记录集10000次:
1132.813 毫秒.
oledb移动记录集10000次:
304.6875 毫秒.
odbc反复打开记录集1000次:
8734.375 毫秒.
oledb反复打开记录集1000次:
7960.938 毫秒.
测试环境,ce1.70/512m/windows xp sp2/withnetbox(不再开发的测试服务器)

显然,在效率上,oledb有些微的优势。微软已经不更新ODBC,用JET方式连接数据库是一种更有效率的办法,特别是在需要移动游标的时候.另外,两者还有一些其他方面的区别,oledb是一种更底层的方法,在这种数据库连接方式中,应该注意的规范更多,就像用sql和access时候,某些查询语句也会不一样.例如:
select from user where id=1
将是一句错误的查询语句,因为user是系统保留的关键字.需要改为
select from [user] where id=1
如果使用odbc连接,则不存在上述情况.
如果使用jet连接,在某些虚拟主机中可能会因为access版本的不同而导致连接失败;所以你需要首先确定主机的引擎版本;在尽可能的情况下,使用以下语句打开access,将提高asp的效率,还有稳定性:
"provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath(db)

此外,打开数据库和记录集对象都是很消耗cpu资源的,尽可能减少查询是很必要的

[来源网络]
http://www.aspxuexi.com/sql/2006-4-7/access_odbc_oledb.htm

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22328375/viewspace-613412/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22328375/viewspace-613412/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值