Oracle8i中存储了上千万记录,需要查询在time1到time2时间段的记录,现在的sql语句如下:
sql = “select * from tablename where TIME>=time1 and TIME<=time2 ”
查询记录的时间非常长有几分钟,请教高手们,如何写这个查询的sql语句才能让查询的时间缩短到几秒内,甚至更短些?请举例说明sql语句。谢谢!很急的。

解决方案 »

  1.   

    1 *改写为表所有字段名,select col1,col2,...,coln from ...
    2 time字段建立索引。
    3 使用并行hint,实现parallel query。
    4 对time字段分区,改为分区表。
      

  2.   

    1,在time字段上建立索引(单列索引最好,至少是time为前导列)
    2,保证给定参数time1 & time2跟表中time字段的类型一致
    3,确保执行计划中使用了time上的索引,如果没有,使用hint强制使用
       select /*+ index(t1 index_time)*/ * from t1
       where time between time1 and time2;
      

  3.   

    1)帖出执行计划,看了就知道原因了
    2)查看v$session_wait, 等待事件是什么
      

  4.   

    高手们,我使用的是ADO方式访问ORACLE的
      

  5.   

    HINT强制索引
    select /*+index(table_name index_name)*/ * from table_name  where .....先查看一下执行计划先吧,用PL/SQL DEVELOP的话,可以选种语句后按F5,也可以用EXPLAIN PLAN FOR SELECT .....
    我建议你要说出你服务器的配置,否则上面提到的分区和并行并不实际,,并且并行的话会执行全表扫描的.
    个人建议并行,你不必考虑在内,处理不好,会影响服务器上的其他性能.还有就是你的条件可能使用到函数,例如TO_CHAR(TIME,'YYYY-MM-DD') 等, 这样可能会用不上索引,,可以尝试建立函数索引
    具体问题具体分析吧..........