大型数据库分页技巧

使用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
为每页显示的记录数量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值