随笔-211  评论-26  文章-8  trackbacks-0

性能对比:
                                                      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的办法:
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="database/user.mdb"
set conn=server.createobject("adodb.connection")
if openmode="oledb" then  openstr="provider=microsoft.jet.oledb.4.0;"+"data source="+server.mappath(db)
if openmode="odbc" then openstr="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 [user]")
 for i=1 to 10000
  rs.movenext
 next
 rs.close
 set rs=nonthing
 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 [user]"
for i=1 to 1000
rs.open sqlstr,conn,1,1
rs.close
next
set rs=nothing
conn.close
set conn=nothing
end if
%>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据库链接方式测试</title>
</head>
<body>
<ul>
<li><a href="test.asp?openmode=odbc&action=open">odbc打开数据库50次</a></li>
<li><a href="test.asp?openmode=oledb&action=open">oledb打开数据库50次</a></li>
<li><a href="test.asp?openmode=odbc&action=move">odbc移动记录10000次</a></li>
<li><a href="test.asp?openmode=oledb&action=move">oledb移动记录10000次</a></li>
<li><a href="test.asp?openmode=odbc&action=getrs">odbc打开记录1000次</a></li>
<li><a href="test.asp?openmode=oledb&action=getrs">oledb打开记录1000次</a></li>

</ul>
<p>
<%
'''''''''''''''''''''''''''''''' 加载完毕的时间
strEndTime = Timer
Response.Write ("运行处理时间: ")
Response.Write 1000*(strEndTime - strStartTime)
Response.Write (" 毫秒.")
response.end
%>
</p>
</body>
</html>
显然,在效率上,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资源的,尽可能减少查询是很必要的

posted on 2006-07-12 17:25 dragon 阅读(452) 评论(0)  编辑  收藏 所属分类: asp学习日记