如何像分页一样不重复地查询数据库?

来源:百度知道 编辑:UC知道 时间:2024/05/26 19:01:40
我用的是oracle数据库,查的表是百万级的,查询某句SQL结果有几十万,结果要完成别的操作。现在我查出的几十万要放到一些List(java.util.list),如果一下子将几十万数据放入一个List,肯定很占内存。
那现在问题是有没有办法,根据count()得到的这几十万,对他进行划分,比如按照两万来划分。我想第一次取1-20000,第二次取20001-40000,第三次取40001-60000这样的办法?而且中查到的结果不能有重复的,多次从数据库里去数据,每次得到一个List,最后得到多个List。
求完整的SQL语句,或者示例。

首先海量数据库建议创建索引或视图,查询速度更快
select count(主键列) from tablename where conditions获取满足的记录数
将count(主键列) 放入变量num中使用for循环分批次获取数据
for(int i=1;i<=num;)
{
int begin=i;
int end=begin+2000;
select column1,column2 from tablename where rownum between(begin,end)
//数据放入list
i=i+20000;
}
这样应该可以达到你要的效果,但如果创建游标并使用函数的话会更好。
如果rownum between(begin,end)有错的话就改为rownum>begin and rownum<end;
在查询语句中使用字符串相加。

select * from (
select rownum as rn,a.* from tablename as a) as b
where b.rn between 1 and 2000

貌似我的空间里有一个分页存储过程,可能对你有帮助