strSQL = "select min([sdate]) ,max([sdate]),count([number]) ,sum([price]*[remain])  ,sum([yuanjia]*[remain]) from allStorage where " & strCondition & "sdate between #" & DTPicker1.value & " 00:00:00# and #" & DTPicker2.value & " 23:59:59# order by sdate desc" 

解决方案 »

  1.   

    有几个地方可以修改一下,但是能够提高效率就不知道了。
    可以将DTPicker1.value转换为date型,用数学方式比较;
    在条件上加索引。
      

  2.   

    1 去掉排序,因为你仅仅得到一条记录而已。
    2 先用子查询过滤,在数据量很大时可以有效地缩小范围。试试:
    strSQL = "select min([sdate]) ,max([sdate]),count([number]) ,sum([price]*[remain]),sum([yuanjia]*[remain]) from (select * from allStorage where " & strCondition & "and sdate between #" & DTPicker1.value & " 00:00:00# and #" & DTPicker2.value & " 23:59:59#)" 或strSQL = "select min([sdate]) ,max([sdate]),count([number]) ,sum([price]*[remain]),sum([yuanjia]*[remain]) from (select * from (select * from allStorage where sdate between #" & Format(DTPicker1,"yyyy-mm-dd") & " 00:00:00# and #" & Format(DTPicker2,"yyyy-mm-dd") & " 23:59:59#) where " & strCondition & ")" 后一情况对于 strCondition 是字符串比较的表达式时更好。总之,将速度快和匹配记录少的条件查询放在最内层的子查询中。
      

  3.   

    呵呵,每次查询都会有的对时间的查询的,所以我早就对时间字段设置了索引,strSQL = "select min([sdate]) ,max([sdate]),count([number]) ,sum([price]*[remain]),sum([yuanjia]*[remain]) from (select * from allStorage where " & strCondition & "and sdate between #" & DTPicker1.value & " 00:00:00# and #" & DTPicker2.value & " 23:59:59#)" 
    用了你这个查询后31200条记录中,在本机数据库上统计所有记录---31200条---只用了1秒,其实我不知道当我查询的数据表有100万条时甚至超过100万的时候,而且是在操作网络上的数据库,这个就不知道能不能保持速度也来3秒之内完成不知道楼上楼下的兄弟有没有处理过海量数据的查询\插入\统计\显示的情况