select name, sum(kbytes) as totalbyte from tablename where substr(begintime, 9, 6) >= '180000' and substr(endtime, 9, 6) <= '200000' group by name;tablename表每条记录大约50多个字段,有2万个用户,每个用户有100条记录。
begintime和endtime是yyyymmddHHMMSS格式。取时分秒作为比较区间。这两个没有索引。
如何提高查询效率。

解决方案 »

  1.   

    建立索引时间不要用varchar2  改成date类型substr(begintime, 9, 6)  不改类型的话,就要建函数索引
      

  2.   

    如果可以的话,增加一个冗余字段,用来保存时分秒 hhmmss
      

  3.   

    这个可以。如何建临时表,有什么效果?最后一步我还必须进行totalbyte字段的排序!
      

  4.   

    200W条数据
    根据你的条件
    substr(begintime, 9, 6) >= '180000' and substr(endtime, 9, 6) <= '200000'
    做400W次substr操作和400W次判断操作,
    效率明显低下
    不建议在判断语句中对表数据进行额外操作