正在做的一个程序涉及数据量比较大
有几千万的记录
不知道PLSQL Developer查询分页是如何实现的
问问大家
先谢谢大家
有几千万的记录
不知道PLSQL Developer查询分页是如何实现的
问问大家
先谢谢大家
解决方案 »
- 在WIN 7 下安装 ORACLE 10G创建数据库时报ORA- 12546: TNS:permission denied
- oracle 函数执行50万数据时候突然停止了.........................急呀!!!(哪位高手帮忙分析一下原因)
- 有关并行执行sql语句的问题。
- 急,关于用g++编译ttclasses,高手来帮忙
- 请教orcale导入导出数据库语句
- 联合使用sqlserver和oracle数据库问题求救
- 怎么将oracle9.0.1升级为9.2
- linux2.1下oracle9i安装,失败。在线急!100分
- 请教高手:pl/sql中能否包含创建视图语句?!在sqlplus出现的语句是否都能放在pl/sql中
- oracle 11g安装时 database configuration assistance 出错
- 表的转置
- plsql连接ORACLE8报错
如果使用的是JDBC3.0,那么可以考虑使用scrolled result set,Oracle的ojdbc14.jar应该支持这种结果集,
它可以绝对定位。另外一种实现方式是,使用rownum的方案:
其分页sql的形式如下:
select * from (select a.*, rownum r from (select * from t where x = :variable order by y ) a
where rownum < :HigerBound )
where r > :LowerBound
这个方法越到后面
每翻一页
耗费时间会越长
PLSQL Developer的分页方式就比较高效
每翻一页的时间比较平均
谢谢楼上
大家还有好方法
方法2里边,对order by后边的字段需要建索引。
方法2应该不会越来越慢的。
第二个方法我已经试过了
order by后面的是一个主键
比如我的表是tb_test
表中主键为fd_id
我插入了5000000条数据
select * from (select a.*, rownum r from (select * from tb_test order by fd_id ) a
where rownum <= 2000)
where r > 1990
耗时0.078秒select * from (select a.*, rownum r from (select * from tb_test order by fd_id ) a
where rownum <= 2000000)
where r > 1999990
耗时11.203秒select * from (select a.*, rownum r from (select * from tb_test order by fd_id ) a
where rownum <= 5000000)
where r > 4999990
耗时27.546秒
google 一下scrolled ResultSet一定有很多解决方案,记住要用ojdbc14.jar那个驱动,而不是classes12.jar/zip