最近,在做一个库管软件。要统计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
我发现:
如果用 下面的循环语句统计要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
你可以把这个语句放到SQL查询分析器里执行一下看 需要几秒
先在名称中加上索引,然后在SQL中执行看看.
Set YieldoutRs = cN.Execute(Sql)
YieldOutNum = Val(YieldoutRs.Fields(0))
Set YieldoutRs = Nothing
Set YieldoutRs = cN.Execute(Sql)
YieldOutNum = Val(YieldoutRs.Fields(0))
Set YieldoutRs = Nothing
话说回来,不得不说一句, 楼主你这服务器配置也太抠门了吧? 真没见过这么吝啬的配置, 这硬件你装个WIN NT+SQL7还勉强能跑.
---------------------------------------------------------------------------------
没有用。和以前一样要11秒!还是用循环快!你在客户机用循环;
配置:AMD 250 CPU 2G内存 XP;
SQL服务器用聚合SQL语句。
配置:赛扬2.13 256M win2003
在客机装了个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和循环效率一样?
'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秒
这里有循环?