我有一张表中有数据约300万条。表结构大致如下:Stat_table
ID      StartTime      Result
1       XXXXX           SUC
....................3000000 XXXXX           Failed这个表时刻在添加新的纪录。要求统计十分钟前到当前的记录的Resutl.虽然ID建了索引,但是 StartTime没有建索引 ,这样简单的以下查询:
select count(Result) from Stat_table
where StartTime > 10分钟前
and   StartTime < 现在
and   Result='SUC';问题是:
1。由于StartTime没有建索引,所以尽管是查10分钟前到当前的数据,应该还是做的是全表查询。这样速度相当慢。有没有办法在不建StartTime索引的前提下大幅度提高查询速度呢?
2。这个“10分钟前”的时间怎么可以得到呢?多谢先。

解决方案 »

  1.   

    1.(还是建索引吧)~2. SYSDATE - 1/24/60*10
      

  2.   

    1.建索引才能提交sql执行效率2. SYSDATE - 1/24/60*10
      

  3.   

    1 建索引对系统的影响没有你想的那么大,正确做法是建索引2 某一取巧办法
    估计10分钟的最大可能的记录数,如为5000
    select count(Result) from Stat_table
    where StartTime > 10分钟前
    and   StartTime < 现在
    and   Result='SUC';
    and id > (select max(id) from stat_table) - 5000
      

  4.   

    加个字段:start_time_1
    使用trigger保持加的字段值与start_time一致
    再在sql里改用start_time
      

  5.   

    楼上的,就是不可以更改表的结构,不可以建索引。只可以查询。我在设想在SQL查询上有什么突破。
      

  6.   

    sql 语句的突破那只能是 “好好利用索引”。 没有别的办法