select t.* from (
select r.*
from repository r where tr.STATUS=1 order by r.UPDATE_TIME desc
)t where rownum<11 我的oracle版本是10.2.0.1,这是我写的取知识库有效信息的前10条最新更新记录的sql语句。数据量小的时候,很快,但是知识库信息表增长到上千万记录的时候,就会变得非常慢 了,这个问题如何结局呢?
select r.*
from repository r where tr.STATUS=1 order by r.UPDATE_TIME desc
)t where rownum<11 我的oracle版本是10.2.0.1,这是我写的取知识库有效信息的前10条最新更新记录的sql语句。数据量小的时候,很快,但是知识库信息表增长到上千万记录的时候,就会变得非常慢 了,这个问题如何结局呢?
from repository r where tr.STATUS=1 and rownum<11
order by r.UPDATE_TIME desc
不错,不过这个可能解决不了速度慢的问题,因为还是需要先把所有数据取出来然后再去前10条。不知道按照update_time字段进行时间分区的话,比如按照月分区的话,这样你查询的时候,基数据就少了些,速度应该会快些吧!但是这个分区不知道对你的业务逻辑时候会影响?如果影响大的话,就不划算了!没有 碰到过这样的问题,等待高人解决!
1.create index ind_1 on repository(STATUS,UPDATE_TIME)2.exec dbms_stats.gather_table_stats(OWNER,TABNAME,cascade=>true)3.
select /*+ ordered use_nl(t2,t)*/ t.*
from (
select rid
from (
select rid,rownum rn
from (
select rowid rid
from repository
where STATUS=1
order by UPDATE_TIME desc))
where rn<=10) t2,repository t
where t2.rid=t.rowid;