更正
第二句应该是
select * from (select *,rownum r_id from table1 order by code) where r_id >=10000 and r_id<=50000
第二句应该是
select * from (select *,rownum r_id from table1 order by code) where r_id >=10000 and r_id<=50000
解决方案 »
- windowsXP在域里面安装oracle10g后连不上实例,请大家帮忙看看。
- 怎么实现两张表相关数据的update?
- 数据库表不建主键,对于程序开发会带来什么缺点?
- 奇怪问题,plsql能连接,服务端却不能连接
- 有经验的请进:谢谢
- 在sql*plus中什么命令能够显示所有表的名称?
- ora8.1.7支持windows xp pro sp1吗?
- 求助各位大虾:删除重复数据 急!!!
- 急:ora-27101 shared memory realm does not exist 怎么办
- sql plus内我怎样知道我登录了哪个数据库?
- 一个简单的问题
- oracle下载多大?要啥机器能运行?有盗版的吗???
但不是理想的.如果r_id是索引,并且第一句中能用索引则性能好一点.
否则则能从别的方面考虑了。如缓存表等(但可能不好)
用这样的语句,一次性的查出来吧,至于后面的分页相对量,自己另外用变量来控制它吧。。
为什么第一句没有结果!怎么可能;就效率而言,肯定是第一句好!因为第一句最多只需要全盘扫描一次;
我认为用ROWNUM分页没有用的,服务器必须选出所有的记录,才能生成rownum,
rownum是虚拟的,不是客观的,服务器只有生成记录后,才有值,也就是所它会把所有的记录读取出来,我个人认为分页可以用ROWID
最后select * from (select *,rownum r_id from table1 order by code) where rownum >=10000 and rownum<=50000是不返回结果的,我以前这么用就没有出结果,应该写成select * from (select *,rownum r_id from table1 order by code) where rownum <=10000
minus
select * from (select *,rownum r_id from table1 order by code) where
rownum<=50000
如果要达到排序效果,性能更不能保证
不排序:
select * from (select * from table1 order by code where rownum<=50000) where rownum>=10000;
如果要达到排序效果,性能更不能保证
不排序:
select * from (select * from table1 order by code where rownum<=50000) where rownum>=10000;
select * from (select a.*,row_number() over(order by code) rm from table1 a) where rm<=50000 where rm>=10000;
这个问题困扰我半年了,一直没法解决。用SQL Server也没法解决(按非唯一索引列排序时)。
难道真的没有人解决问题吗?No!看看oracle的SQLPlus,执行一个返回大量数据的SQL语句,不是一次返回所有记录吧!想想人家是怎么做的。
效率很好,可行,不需要加order by