关于优化sql语句的写法,急急急!!在线等

来源:百度知道 编辑:UC知道 时间:2024/05/26 17:30:49
CASE "Y"
SQL="SELECT * FROM HY_SELL_MASTER_TABLE WHERE CREATE_DATE<='"&Cdate(trim(LAST_TODAYYEAR))&"' AND CREATE_DATE>='"&Cdate(trim(TODAYYEAR))&"'"
SET TRS=CONN.EXECUTE(SQL)
DO WHILE NOT TRS.EOF
SQL="SELECT sum(COST_PRICE*SELL_NUMBER)as allsum FROM HY_SELL_DETAIL_TABLE WHERE BILL_RECORD_ID='"&TRIM(TRS("BILL_RECORD_ID"))&"'"
SET Srs=conn.execute(sql)
IF Srs("allsum")<>"" THEN
SUMS=Srs("allsum") '得到了货的成本金额
SRS.CLOSE
SET SRS=NOTHING
END IF
ALLSUMS_l=ALLSUMS_l+CDBL(SUMS)
TRS.MOVENEXT
LOOP
TRS.CLOSE
SET TRS=NOTHING
RESPONSE.WRITE""&ALLSUMS_l '得出是什么时间的销成本汇总
以上的语句是没错的,但是执行时很慢很占用CPU的资源,有办法写成其它方式吗?求SQL熟练者指教.

优化的思路是这样的:
把"CREATE_DATE>=? and CREATE_DATE<=?"改成"CREATE_DATE between ? and ?",如果表不是很大,建立CREATE_DATE,BILL_RECORD_ID的索引,建立COST_PRICE*SELL_NUMBER的函数索引,应该会快起来。如果表中字段很多,可以考虑建立联合索引,这样数据块的查找速度会提高不少。
如果数据量很大,建议你把表HY_SELL_MASTER_TABLE改成分区表,查询条件追踪加入"分区字段=?"会快很多。
如果数据量超大,强烈建议你建立一套分布式查询的方案,否则会越来越慢,到最后你的系统会支撑不住。