oracle 高效分页

由于网页渲染速度的影响,在C/S程序中那种一个Grid包含几千、上万行的数据基本上在网页是无法展现的,因此一般采用分页的形式显示(也可能采用Visual Srolling方式加载的,企业应用系统的不是很常见),ASP.NET 的数据控件一般带有分页功能,3.5以后还提供了单独的分页控件,也有用过AspNetPager这个第三方的组件。

分页的控件实在很方便,以前的处理方式就是数据都拿出来,然后由控件进行处理,一般数据量不大的时候应该说感觉不出来优劣,但由于每次从数据库取的时候都是取所有的数据,肯定会增加数据库的压力,传输的数据库多了对网络带宽也会产生压力的。很有可能查出来1万条数据,最后显示只用到启用50条,翻页的时候又重新去查1万条数据,显示之后的的又50条。

以下的分页sql比较常见的,在sql Server也有对应的使用TOP关键字的版本,记得刚学Oralce的时候就想着怎么不能rownum between minValue and maxValue的用法。与最初的疑惑的原理一样,rownum是在查询过程中生成的,因此以下的sql其实是查出来5300行,然后扔掉了前面5000行,返回后面的300行。当然这种已经进了一大步的,由数据库返回的数据变少的,只是当查询的页数比较大的时候,查询还是存在一定的浪费。

1
2
3
4
5
select *
from ( a.*,rownum as rnum
* yz_bingrenyz) a
where rownum <=5300)
rnum >= 5000

Linq提供了Skip和Take的API可以用于分页,由于使用的是Entity Framework,在好奇的驱使下用EFProfiler查看生成sql,才知道这样以下分页更好。 主要就是使用了row_numer()over()这样的分析函数,可以直接找到那第5000行开始的地方,然后在取出30行就行了。

5
6
*
t.*,row_number() OVER( ORDER BY null ) AS "row_number"
yz_bingrenyz t) p
p. "row_number" > 5000) q
rownum <= 300

http://www.cnblogs.com/xiaopang2010/archive/2012/07/23/2604880.html

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...