• 1
  • 2
  • 3
  • 4
  • 5
网站空间访问异常 首 页  »  帮助中心  »  虚拟主机  »  网站空间访问异常
网站耗资源和脚本超时常见原因分析
发布日期:2015-12-8 17:12:37

  1.程序死循环

  出现死循环很多情况下是因为程序缺少必要的检测和判断条件,这种情况需要检查和完善站点程序的代码。

  2.没建好数据库的索引

  一个表至少有一个主键和N个外键,一般主键是作为表的唯一标识的。当检索数据时,如果以主键的值来进行查找的话效率会比较高,而一些标志性的字段,如产品表的产品所属分类、用户表的用户等级等,如果在程序中经常要用到这些字段来进行检索数据,那么一般应该为这些字段建立索引,这样检索数据的时候性能会好很多。

  3.网站采用 access 数据库,数据库的容量比较大

  如果采用access数据库,当数据库的容量比较大(比如超过 100M 以上),性能就可能会出现问题,所以访问量大的网站一般都采用 mysql、sqlserver、oracle 等性能比较高的数据库引擎。

  4.程序有嵌套查询

  嵌套查询代码示例:

  <%

        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.id=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

      %>