最近,在做一个库管软件。要统计8个表的数据,这8个表有入库,有出库,中间用到了统计
我发现:
如果用 下面的循环语句统计要4秒Sql = "select * from J_报损   where 名称='" & StrNumber & "'"
Set YieldQuitRs = New Recordset
YieldQuitRs.Open Sql, cN, 1, 1
While Not YieldQuitRs.EOF
        YieldQuitNum = YieldQuitNum + Val(YieldQuitRs.Fields("数量"))
        YieldQuitRs.MoveNext
Wend
YieldQuitRs.Close如果用 下面的SQL语句统计统计却要9秒Sql = "select sum(数量) from J_生产出库 where 名称='" & StrNumber & "'"
Call OpenConn
Set YieldoutRs = New Recordset
YieldoutRs.Open Sql, cN, 1, 1
        YieldOutNum = Val(YieldoutRs.Fields(0))
YieldoutRs.Close真是怪事!为何SQL语句统计的效率还不如循环语句?  难道和SQL服务器的配置有关?客机: AMD 250 CPU 2G内存  XP ;  SQL服务器: 赛扬2.13  256M win2003

解决方案 »

  1.   

    Sql = "select sum(数量) from J_生产出库 where 名称='" & StrNumber & "'"
    你可以把这个语句放到SQL查询分析器里执行一下看 需要几秒
      

  2.   

    应该不可能出现这种事情吧。
    先在名称中加上索引,然后在SQL中执行看看.
      

  3.   

    SQL服务器: 赛扬2.13 256M win2003这种配置也能做服务器?这个内存只勉强能跑win2003....
      

  4.   

    试试:Sql = "select sum(数量) from (select 数量 from J_生产出库 where 名称='" & StrNumber & "')"Call OpenConn
    Set YieldoutRs = cN.Execute(Sql)
    YieldOutNum = Val(YieldoutRs.Fields(0))
    Set YieldoutRs = Nothing
      

  5.   

    Sql = "select sum(数量) from (select 数量 from J_生产出库 where 名称='" & StrNumber & "')"Call OpenConn
    Set YieldoutRs = cN.Execute(Sql)
    YieldOutNum = Val(YieldoutRs.Fields(0))
    Set YieldoutRs = Nothing
      

  6.   

    很简单, 楼主只要把你的客户机和服务器硬件换一换就能得到相反的结果了.
    话说回来,不得不说一句, 楼主你这服务器配置也太抠门了吧? 真没见过这么吝啬的配置, 这硬件你装个WIN NT+SQL7还勉强能跑.
      

  7.   

    Sql = "select sum(数量) from (select 数量 from J_生产出库 where 名称='" & StrNumber & "')"这样的语句是否会打破查询计划,从而导致查询优化不能很好的运行。
    ---------------------------------------------------------------------------------
    没有用。和以前一样要11秒!还是用循环快!你在客户机用循环;
    配置:AMD 250 CPU 2G内存 XP;
    SQL服务器用聚合SQL语句。
    配置:赛扬2.13 256M win2003
      

  8.   


    在客机装了个2003的虚拟机,一样的数据量1.Sql = "select sum(数量) AS Expr1 from (select 数量 from J_生产出库 where 名称='" & StrNumber & "') DERIVEDTBL"   跑出5秒2.循环 也是5秒Sql = "select sum(数量) AS Expr1  from J_生产出库 where 名称='" & StrNumber & "'" 也是5秒难道 Sql和循环效率一样?
      

  9.   


    '1.
    Sql = "select sum(数量) AS Expr1 from (select 数量 from J_生产出库 where 名称='" & StrNumber & "') DERIVEDTBL" 跑出5秒'2.循环 也是5秒Sql = "select sum(数量) AS Expr1 from J_生产出库 where 名称='" & StrNumber & "'"'也是5秒
    这里有循环?