[Quote=引用 1 楼 iihero 的回复:]
如果是涉及几千万的记录,确实需要慎重考虑实现方案。
如果使用的是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
[/Quote]
回3楼
第二个方法我已经试过了
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秒
如果是涉及几千万的记录,确实需要慎重考虑实现方案。
如果使用的是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