若数据量很大,要分好几百页,如果一次将结果都查询出来,速度会很慢,下面我学会的一种解决方法:
若每页显示10条,使用SQL每次只查询出要显示的10条数据。即第一次查询出1-10条数据,第二次查询出11-20条数据,依次类推。
具体的SQL语句的写法如下:
例如若要查询出第4901-5000的100条数据,SQL为:
select * from (select t.*,rownum my_rownum from cust_info t)
where my_rownum>4900 and my_rownum <=5000
其实这种方法就是通过两次查询,在第一次查询中生成行号rownum这个字段,字段中的值是按照查询结果从1开始依次按顺序填充的(即结果集第几行对应的行号就是几)。第二次查询再以第一次查询中生成的行号为查询条件,选出部分你想要的数据。
但是如果你的第一次查询中带有order by的排序子句,生成的行号并不是和结果集的记录的行的位置依次对应的,这是因为数据库是先生成行号,后排序的。所以若要在带order by子句的结果集中取出第n行到第n+m行数据,就需要三次查询,即先查询出结果,第二次查询生成行号,第三次查询从第二次查询中取出部分数据。
具体的SQL语句如下:
select * from(select rownum as myrownum,mytable.* from(" + sql +") mytable) where myrownum <= " + pageid*N + " and myrownum > " + (pageid-1)*N
总之,这种方法基本可以解决大批量数据分页问题,速度相对于直接查询出全部结果要快。