对性能要求很高的场合,一个频繁调用的函数中,需要得到数据库中的两个数据(仅仅是两个数据,不是两条记录或者两个字段)。此情况下,是使用RecordSet方法更快,还是使用Command执行存储过程、然后从存储过程返回的参数中获取更快?还有没有其它好的方法?

解决方案 »

  1.   

    Why I couldn't see this article in list?
      

  2.   

    当然存储过程快,存储过程是编译好的(除第一次执行以外)。RecordSet也可以是只读只向前的,比如直接用连接执行一个SQL返回的记录集,速度也很快,如果查询不是很复杂,两者速度应该差不多
      

  3.   

    我认为:   首先,从传递的数据流量看:用command对象执行存储过程,在存储过程中堡查询到的数据作为参数返回(因为你只想要两个数据),这样要比recordeset传递表结构来得快   其次,如果查询较为复杂,可以建立视图(完成全部或大部分查询),这样服务器会事先自动维护视图(节省了复杂查询的时间),然后用存储过程从视图执行简单查询,
    大量的工作在服务器端预处理和完成,时间自然会节省不少
      

  4.   

    呵呵,谢谢大家。
    才发现漏了一个前提:使用Recordset执行的也是一个存储过程。
    而且,假设这两个存储过程在SQL Server上执行的效率一样快。
    例如:
    (1)
    dim a,b
    set rs=cn.execute("CheckUserStat1 " & strUserName)
    a=rs.fields(0)
    b=rs.fields(1)(2)
     dim a,b
     Cmd.CommandText = "CheckUserStat2"
     Cmd.CommandType = adCmdStoredProc
     Set para1 = Cmd.CreateParameter("Stat1", adInteger, adParamOutput)
     Cmd.Parameters.Append para1
      Set para2 = Cmd.CreateParameter("Stat2", adInteger, adParamOutput)
     Cmd.Parameters.Append para2
     Set para3 =Cmd.CreateParameter("strUserName", adVarChar, adParamInput)
     para3.Size = 100
     Cmd.Parameters.Append para3
     para3.Value = Trim(strUserName)
     m_Cmd.Execute a=para1.Value
     b=para2.Valueto:frankwong(黄梓钿) 
    你说的那个方式是不是在服务器端要有一个service负责接收和解析、处理这个请求包?是使用SOCKET方式传送吗?