使用resultset分页缺点:
resultset实际是一个数据缓冲区,需要耗费一定的内存。
1当会话数较多时,消耗的内存等系统资源比较厉害,每一个resultset
都需要占用一定数量的内存。
2如果每个结果集中记录数量很多时,即将所有的数据都缓存到resultset
中,消耗的内存相对厉害。有时候一个resultset可能消耗掉100M以上的内存,
且性能急剧下降,相应速度奇慢(时间甚至达到几十分钟)。
在一些大型应用中,,如电信系统、金融系统,某些表中记录数达到几亿条
以上,用resultset进行分页肯定是不行的。这时一般可以利用不同的大型
数据库提供的一些增强的sql功能来实现和改进分页。
Oracle数据库分页
例子:select * from
(select a.*, rownum rc
from
(select *
from goods
order by goods_type asc
) a
where rownum <= endrow
) b
where rc >= startrow
解释:其中startrow、endstart分别为当前页的起始行和终止行。具体应用
时可用startrow=(intpage-1)*perpagesize+1,
endstart=intpage*perpagesize进行计算
DB2数据库分页
例子:
select * from
( select rownumber() over() as rc,a.*
from (
select *
from goods
order by goods_type asc ))
) a
where rc between startrow and endrow
解释:其中startrow、endstart分别为当前页的起始行和终止行。具体应用
时可用startrow=(intpage-1)*perpagesize+1,
endstart=intpage*perpagesize进行计算
SQL Server2000数据库分页
例子:
select top perpagesize *
from goods
where (goods_id not int
(select top perpagesize*intpage goods_id
from goods
order by goods_id))
order by goods_id
SQL Server 2005数据库分页
SQL Server2005比SQL Server2000增加了非常多的新功能,利用
这些新功能可以获得更好的分页查询性能并简化sql语句的编写。
例子:
select *
from
(select goods_id,ROW_NUMBER() OVER (order by goods_name)
as curr from goods
)as t
where t.curr >=startrow
and t.curr <=endrow
MySQL数据库分页
MySQL的数据库分页最为简单
例子:
select *
from goods
limit startrow,
perpagesize
解释,其中start为当前页起始行,可以用
startrow=(intpage-1)*perpagesize+1,进行计算,perpagesize
为每页显示的记录数量
PostgreSQL数据库分页
PostgreSQL的数据库分页也比较简单
例子:
select *
from goods
limit perpagesize,
offset startrow
解释,其中start为当前页起始行,可以用
startrow=(intpage-1)*perpagesize+1,进行计算,perpagesize
为每页显示的记录数量