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

这篇博客对比了ASP中使用OleDb和Odbc两种方式连接Access数据库的性能。结果显示,OleDb在打开数据库、移动记录集和反复打开记录集上的效率比Odbc更高。微软不再更新ODBC,推荐使用Jet(OleDb)方式来提升ASP应用的效率和稳定性。文章还提到了两者在关键字处理和不同虚拟主机环境中的兼容性问题。
摘要由CSDN通过智能技术生成

性能对比:

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资源的,尽可能减少查询是很必要的

[来源网络]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值