Oracle8i中存储了上千万记录,需要查询在time1到time2时间段的记录,现在的sql语句如下:
sql = “select * from tablename where TIME>=time1 and TIME<=time2 ”
查询记录的时间非常长有几分钟,请教高手们,如何写这个查询的sql语句才能让查询的时间缩短到几秒内,甚至更短些?请举例说明sql语句。谢谢!很急的。
sql = “select * from tablename where TIME>=time1 and TIME<=time2 ”
查询记录的时间非常长有几分钟,请教高手们,如何写这个查询的sql语句才能让查询的时间缩短到几秒内,甚至更短些?请举例说明sql语句。谢谢!很急的。
2 time字段建立索引。
3 使用并行hint,实现parallel query。
4 对time字段分区,改为分区表。
2,保证给定参数time1 & time2跟表中time字段的类型一致
3,确保执行计划中使用了time上的索引,如果没有,使用hint强制使用
select /*+ index(t1 index_time)*/ * from t1
where time between time1 and time2;
2)查看v$session_wait, 等待事件是什么
select /*+index(table_name index_name)*/ * from table_name where .....先查看一下执行计划先吧,用PL/SQL DEVELOP的话,可以选种语句后按F5,也可以用EXPLAIN PLAN FOR SELECT .....
我建议你要说出你服务器的配置,否则上面提到的分区和并行并不实际,,并且并行的话会执行全表扫描的.
个人建议并行,你不必考虑在内,处理不好,会影响服务器上的其他性能.还有就是你的条件可能使用到函数,例如TO_CHAR(TIME,'YYYY-MM-DD') 等, 这样可能会用不上索引,,可以尝试建立函数索引
具体问题具体分析吧..........