因为有了to_date 和between 速度会慢点的/
SELECT
*
FROM
T_AG_RECORDFILE
where
RECORDTIME >=to_date('2004-06-30 11:00:00','yyyy-mm-dd hh24:mi:ss')
and RECORDTIME <=to_date('2004-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
and rownum<=25
试一下看看.
SELECT
*
FROM
T_AG_RECORDFILE
where
RECORDTIME >=to_date('2004-06-30 11:00:00','yyyy-mm-dd hh24:mi:ss')
and RECORDTIME <=to_date('2004-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
and rownum<=25
试一下看看.
解决方案 »
- Oracle创建表,字段如果不指定为null,是否默认为null?
- 关于oracle中的UTL_FILE.PUT_LINE/v$access的长时间等待
- 点击editdata按钮,为什么会跳出错误“these query result are not updateable....”
- 同志们帮我看看我的这条SQL错在哪里为什么不能得到我想要的答案
- 请求大家给一个使用vc开发proc*c的例子(针对oracle9i)!!真的很感谢大家!
- 关于存储过程的问题,关于传值的问题,一个varchar的变量,放在update 表名 set a=变量 where a_id in(varchar变量)会出错!
- 哪位老大告诉我:ORACLE provider for OLE DB在哪里可以下载,oracle官方网站下不下来
- 请求支援: 如何用c#连接远程oracle数据库?
- delphi关于数据库的问题
- 嵌入式SQL的主变量的问题
- 如何提高SELECT的性能?(求助高手)
- 数据库导入的问题?急!(小问题啊。。。。多支持!)
zhenhuakfc (肯德基) 可能是这样认为的:SELECT * FROM T_AG_RECORDFILE where rownum<25 只要0.1秒左右,那么SELECT * FROM T_AG_RECORDFILE where rownum<25 and (RECORDTIME between to_date('2004-06-30 11:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2004-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))时间应该更短--因为还增加了限制条件。
这种想法是错误的,oracle在对语句分析的时候,不可能把rownum<25作为首次filter条件,rownum本身就是一个伪列,必然是首先执行(RECORDTIME between to_date('2004-06-30 11:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2004-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))在此基础上进行rownum的判断,直到选中25条,由此会造成查询速度大为降低
只能说
SELECT * FROM T_AG_RECORDFILE where rownum<25 and (RECORDTIME between to_date('2004-06-30 11:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2004-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))要比
SELECT * FROM T_AG_RECORDFILE where (RECORDTIME between to_date('2004-06-30 11:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2004-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))快而已
create index idx_T_AG_RECORDFILE_RECORDTIME on T_AG_RECORDFILE(RECORDTIME) compute statistics;