我爱Aspx >> C#.Net >> 如何在SqlServer与oracel中进行分页的讨论! _数据库技巧
使用sql,和oracle数据库进行分页可以有以下三种方法!
下面让我们看一看如果我们要在数据库中取第1000条到第1010条的数据这两种方法是怎么实现的.
1. 使用临时表的方法. (在系统中主要是直接写Sql语句来做)
a) 按所需的排序方式排好序
b) 创建临时表
c) 从数据库里取出第0条 到 第1010条的数据
d) 把这些数据放入临时表中
e) 把临时表再按与 a) 相反的排序方式排好序
f) 然后只需把临时表中的前10条显时出来
g) 销毁临时表
2. 使用 object 的方法
a) 按所需的排序方式排好序
b) 从数据库里取出第0条 到 第1010条的数据
c) 倒着从这1010条数据中取10条 放入一个 object中
d) 把这个 object里的记录 完全倒置一下
e) 把 object里的数据显示出来
显然 第二种 方法优于第一种方法 它减少了系统创建, 销毁临时表所需耗费的资源, 但是它们都有一个共同的弱点. 那就是 它们都要从数据库里取出第0条 到 第1010条的数据 这样就造成了 查询出的记录数很少,但网络传输数据量很大!
因此比较好的分页做法应该是:
每次翻页的时候只从数据库里检索页面大小的块区的数据。这样虽然每次翻页都需要查询数据库,但查询出的记录数很少,网络传输数据量不大,如果使用连接池更可以略过最耗时的建立数据库连接过程。而在数据库端有各种成熟的优化技术用于提高查询速度,比在应用服务器层做缓存有效多了。
对于SqlServer 数据库 如要到得第1000-1010条记录:
Select top 10 * from (
Select top 10 * from (
Select top 1010 * from docdetail order by lastmodidate asc ,Id asc
) temptbl1 order by lastmodidate desc ,Id desc
) temptbl2 order by lastmodidate asc,Id asc
对于oracle 数据库 如要到得第1000-1010条记录 由于oracle中的rownum是在查询之后排序之前赋值的.所以其相应的写法应为:
select * from (
select my_table.*, rownum as temptbl_rownum from (
Select * from docdetail order by lastmodidate asc,Id asc
) temptbl where rownum <1010
) where temptbl_rownum >=1000
当以上的Sql语句执行完成以后, 网络传输数据量就从以前的1010条减少到 10条
通过以上分页方式的改变,对我们系统的性能有很大的提升
我有个客户使用的是oracel数据库 其中文档数目为 12万条 ,当我们对这张表时行搜索的时候 使用第一种方法进行分页时,页面显示的时间约为10秒左右,而使用第三种方法而现在页面显示时间只需要2-3秒左右.
当然,可能还有更好的分页方法,总觉得随着数据库里的数据的不断增加,系统运行的速度将会变慢,我在这里贴出这篇文章,只是想和大家讨论一下,还有没有更好的方法, 希望大家不吝回复! 一起讨论!
:D (完)
[点击此处收藏本文]
发表于 2005年04月12日 9:35 AM
随便说说 发表于2005-04-14 2:42 PM
1.
select my_table.*, rownum as temptbl_rownum from (
Select * from docdetail order by lastmodidate asc,Id asc
) temptbl where rownum <1010 and rownum >=1000
2.
select * from docdetail rownum <1010
minus
select * from docdetail rownum <1000
Ҷƪл˵?
关于SQL Server SQL语句查询分页..[04-28]
PHP+MySQL分页显示示例分析_PHP技..[04-28]
SQL Server 2005 提供的分页查询..[04-28]
VB6 ADO ListView数据库分页显示..[04-28]
Repeater读取数据并分页 _ASP.NE..[04-28]
Sql server 2005带来的分页便利_..[04-28]
SQL分页算法,还可以更好 _数据库..[04-28]
做个DataList 可分页的数据源_AS..[04-28]
SQL server 2005的简单分页程序 ..[04-28]
打造通用ASP.NET数据分页控件_AS..[04-28]
用PreRender解决DataGrid分页最后..[04-28]
Asp.net url分页的用户控件 _ASP..[04-28]
关于SQL Server SQL语句查询分页..[04-28]
ASP+FSO+框架实现ASP生成htm并分..[04-28]
一种比较方便的ASP分页程序_ASP技..[04-28]
PHP中模板分页的处理_PHP技巧[04-28]
Asp用于分页的两个函数_ASP技巧[04-28]
在ASP中轻松实现记录集分页显示_..[04-28]
asp+oracle分页程序类(XDOWNPAG..[04-28]
PHP+MySQL分页显示示例分析_PHP技..[04-28]