order by rowidSQL> select * from dept order by rowid desc; DEPTNO DNAME LOC ---------- -------------- ------------- 40 OPERATIONS BOSTON 30 SALES CHICAGO 20 RESEARCH DALLAS 10 ACCOUNTING NEW YORK已用时间: 00: 00: 00.10 SQL>
order by rowidSQL> select * from dept order by rowid desc; DEPTNO DNAME LOC ---------- -------------- ------------- 40 OPERATIONS BOSTON 30 SALES CHICAGO 20 RESEARCH DALLAS 10 ACCOUNTING NEW YORK已用时间: 00: 00: 00.10 SQL>
那么,如果我想按ID降序排列,并取其中的第20到50条记录,如何写SQL效率更高? 我这样写: select * from (select rownum rn,table.* from table order by column_name) where rn>=20 and rn<=50 但如果表里有2万条记录时,就会需要3秒左右,但实际的表格有10万记录左右,这样每查询一次需要的时间太长了啊。 Oracle是大型数据库,它应该可以优化查询速度吧
to bobfang(匆匆过客) 我在那个帖子上有个人这样写 select * from(select t.*,row_number() over(order by t.id desc) rn from table t )where rn>0 and rn<=20 我向问一下,Over函数是怎么意思,而且这个语句中没有用到Rowid,能查询到吗?
to bobfang(匆匆过客) 你是这样写的: select /*+FIRST_ROWS*/ * from t where rowid in ( select rid from ( select rownum rno,rid from ( select rowid rid from t where category = 20 order by category,product_name ) where rownum <= 5000 ) where rno >= 4981 ) 但我看在子查询里选择记录还是用的rownum,那么这样写是用的什么原理让查询速度变快呢? category 是T表中的某列吧?既然Where后面已经有了category = 20条件,Order By后面为什么要加上category? 不好意思,对这种查询的原理不是很理解,请指教,谢谢.
---------- -------------- -------------
40 OPERATIONS BOSTON
30 SALES CHICAGO
20 RESEARCH DALLAS
10 ACCOUNTING NEW YORK已用时间: 00: 00: 00.10
SQL>
---------- -------------- -------------
40 OPERATIONS BOSTON
30 SALES CHICAGO
20 RESEARCH DALLAS
10 ACCOUNTING NEW YORK已用时间: 00: 00: 00.10
SQL>
我这样写:
select * from (select rownum rn,table.* from table order by column_name) where rn>=20 and rn<=50
但如果表里有2万条记录时,就会需要3秒左右,但实际的表格有10万记录左右,这样每查询一次需要的时间太长了啊。
Oracle是大型数据库,它应该可以优化查询速度吧
我在那个帖子上有个人这样写
select * from(select t.*,row_number() over(order by t.id desc) rn from table t )where rn>0 and rn<=20
我向问一下,Over函数是怎么意思,而且这个语句中没有用到Rowid,能查询到吗?
你是这样写的:
select /*+FIRST_ROWS*/ * from t
where rowid in
( select rid from
( select rownum rno,rid from
( select rowid rid from t
where category = 20
order by category,product_name
) where rownum <= 5000
) where rno >= 4981
)
但我看在子查询里选择记录还是用的rownum,那么这样写是用的什么原理让查询速度变快呢?
category 是T表中的某列吧?既然Where后面已经有了category = 20条件,Order By后面为什么要加上category?
不好意思,对这种查询的原理不是很理解,请指教,谢谢.