4006-3721-06 / QQ:623431139
经常有人会问:我的网站是个很普通的网站,没有多少访问量,为什么还经常提示耗资源?是不是主机问题等。今天小编就这个问题给大家解答下:
1.什么是耗资源?
耗资源即程序占用 CPU 及内存过多,是对资源的一种浪费。客户使用虚拟主机时程序编写的不合理、错误严重,造成服务器负载急剧上升,极大的影响了正常客户的使用,就是耗资源(客户程序故障)。耗资源(客户程序故障)分为耗用 CPU 资源和内存资源两种。
2.什么原因导致的耗资源?
.程序出现死循环
在很多情况下,出现死循环是因为程序缺少必要的检测和判断条件导致,这种情况需网站开发者对站点程序的代码进行检查和完善。
.程序有嵌套查询
sql = "select * from a"
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
sql2 = "select * from b where fid=" & rs("id")
set rs2 = server.createobject("adodb.recordset")
rs2.open sql2,conn,1,1 ' //使用嵌套查询,效率会出现下降
while not rs2.eof
response.write rs("id") & "=" & rs2("name")
rs2.movenext
wend
rs.movenext
wend
嵌套查询会造成数据库的查询量呈指数级上升,导致一个程序的查询效率非常低。若程序改为连表操作,查询数据库的次数会少很多,并且在设计数据库的时候应该将b表的fid字段建立索引,否则连表查询的时候性能会差很多,代码示例如下所示。
<%
sql = "select a.id ,b.name from a left join b on b.fid=a.id" '//使用连表操作,并用具体的字段名代替 *,程序是高效很多
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
response.write rs("id") & "=" & rs("name")
rs.movenext
wend
%>
.ACCESS数据库的容量比较大
如果网站采用ACCESS数据库,当数据库的容量比较大时(比如超过100M以上),性能就可能会出现问题,所以访问量大的网站一般都采用SQL Server、MySQL、Oracle等性能比较高的数据库引擎。
.数据库的索引设置问题
一个表至少有一个主键和N个外键,一般主键作为表的唯一标识。当检索数据时,如果以主键的值来进行查找的话效率会比较高,而一些标志性的字段,例如产品表的产品所属分类、用户表的用户等级等,在程序中经常要用到这些字段来进行检索数据。那么,一般应该给这些字段建立索引,这样检索数据的时候性能会好很多。
耗资源即程序占用 CPU 及内存过多,是对资源的一种浪费。客户使用虚拟主机时程序编写的不合理、错误严重,造成服务器负载急剧上升,极大的影响了正常客户的使用,就是耗资源(客户程序故障)。耗资源(客户程序故障)分为耗用 CPU 资源和内存资源两种。
.程序出现死循环
在很多情况下,出现死循环是因为程序缺少必要的检测和判断条件导致,这种情况需网站开发者对站点程序的代码进行检查和完善。
.程序有嵌套查询
sql = "select * from a"
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
sql2 = "select * from b where fid=" & rs("id")
set rs2 = server.createobject("adodb.recordset")
rs2.open sql2,conn,1,1 ' //使用嵌套查询,效率会出现下降
while not rs2.eof
response.write rs("id") & "=" & rs2("name")
rs2.movenext
wend
rs.movenext
wend
嵌套查询会造成数据库的查询量呈指数级上升,导致一个程序的查询效率非常低。若程序改为连表操作,查询数据库的次数会少很多,并且在设计数据库的时候应该将b表的fid字段建立索引,否则连表查询的时候性能会差很多,代码示例如下所示。
<%
sql = "select a.id ,b.name from a left join b on b.fid=a.id" '//使用连表操作,并用具体的字段名代替 *,程序是高效很多
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
response.write rs("id") & "=" & rs("name")
rs.movenext
wend
%>
.ACCESS数据库的容量比较大
如果网站采用ACCESS数据库,当数据库的容量比较大时(比如超过100M以上),性能就可能会出现问题,所以访问量大的网站一般都采用SQL Server、MySQL、Oracle等性能比较高的数据库引擎。
.数据库的索引设置问题
一个表至少有一个主键和N个外键,一般主键作为表的唯一标识。当检索数据时,如果以主键的值来进行查找的话效率会比较高,而一些标志性的字段,例如产品表的产品所属分类、用户表的用户等级等,在程序中经常要用到这些字段来进行检索数据。那么,一般应该给这些字段建立索引,这样检索数据的时候性能会好很多。