因为有了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过程加密出错了
- 非归档模式表空间坏 如何恢复
- Oracle编程高手请进:问一个关于OraclePackage大小的问题
- imp导入数据时报undo表空间无法扩展,如何解决
- 这样备份有用吗?
- IMP.EXE 错误
- 求助:在LINUX下安装ORACLE8.0.5时提示的错误!!
- oracle的最新版本是多少?中文名叫什么?
- 如果时间为:****-**-** 00:00:00的时候,用getString取出的时间为:****-**-** 00:00:00.0后面多了".0",其他的情况没问题
- 怎么得到某一行某一列的数据
- 如何提高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;