如何在SqlServer与oracel中进行分页的讨论!

server|sqlserver|分页

使用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 (完)

 

时间: 2024-09-20 19:26:58

如何在SqlServer与oracel中进行分页的讨论!的相关文章

我是如何在SQLServer中处理每天四亿三千万记录的

首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. 项目背景 这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空再写相关的博文出来. 这个项目是要求做环境监控,我们暂且把受监控的设备称为采集设备,采集设备的属性

增量数据获取-如何在SQLServer中获取数据库的增量数据?

问题描述 如何在SQLServer中获取数据库的增量数据? 如何在SQLServer中获取数据库的增量数据? ?有如下要求: 1.是获取整个数据库的增量数据,而不是针对单表. 2.对整个目标数据库只有只读的权限,没有写入的权限. 3.目标数据库的的表结构可能是任意的,我们不能依赖于表结构. 4.指定点可以是一个时间点或者其他. 解决方案 获取数据库增量数据的几种方式获取SqlServer数据库数据,转成JSON对象 解决方案二: 经济条件允许的情况下可以使用SQLSERVER2008企业版中的C

如何在DataGrid控件中实现自定义分页_自学过程

如何在DataGrid控件中实现自定义分页      在一般情况下,DataGrid控件每次实现翻页操作时,都会将数据源中的数据重新调用一次,当数据中 数据很多时,这样做就会很浪费系统资源和降低程序的执行效率.这时候我们一般通过自定义分页来解 决这个问题.     DataGrid控件的AllowCustomPaging属性用来获取或设置DataGrid控件是否允许自定义分 页;VirtualItemCoun属性用来获取或设置在使用自定义分页时DataGrid中实际的项数.要实现自定义分 页,必

如何在Word 2013文档中插入分页符

分页符主要用于在Word2013文档的任意位置强制分页,使分页符后边的内容转到新的一页.使用分页符分页不同于Word2013文档自动分页,分页符前后文档始终处于两个不同的页面中,不会随着字体.版式的改变合并为一页.用户可以通过三种方式在Word2013文档中插入分页符: 方式1:打开Word2013文档窗口,将插入点定位到需要分页的位置.切换到"页面布局"功能区.在"页面设置"分组中单击"分隔符"按钮,并在打开的"分隔符"下拉

如何在Word2010中添加分页符

  分页符,顾名思义就是分开页与页之间的符号,这样可以更好的对不同的页面进行编辑.想要灵活的对页面格式进行设置的话,可不是那么简单的,首先要在Word2010中寻找到分页符,然后再插入. Word2010 方法一 打开Word2010文档,将光标移动到目标位置. 打开"页面布局"选项卡. 在"页面设置"中单击"分隔符"按钮. 在"分隔符"列表中选择"分页符"选项. 方法二 打开Word2010文档窗口,将光

OEA ORM中的分页支持

 本篇博客主要描述分页的常见技术方案,以及在 OEA 框架中的分页的应用及实现原理.   分页的几种方案     分页是解决大数据量显示的有效方法.根据分页技术应用的位置不同,大致可以把分页分为以下几种: 界面层分页      界面层的分页,类似于界面的虚拟化技术,是只显示需要的数据的一种技术.OEA 的 WPF 界面中目前已经实现了 UI 虚拟化,所以不再实现界面层分页. 优点: * 简单.许多控件都支持在界面层直接进行分页. * 换页时,响应快.(在 C/S 结构下使用这种方案,数据都已经到

java开发中通用分页类代码

java开发中通用分页类代码 在java中要分页我们必须要有数据库教程,所以我们先准备下数据库,其数据库脚步如下: --以下是创建数据库和数据库表以及向数据库插入数据   use master  Go  if exists(select * from sysdatabases where name='pagination')  drop database pagination  Go  create database pagination  Go  use pagination  Go  cre

Python的Flask框架中实现分页功能的教程

  这篇文章主要介绍了Python的Flask框架中实现分页功能的教程,文中的示例基于一个博客来实现,需要的朋友可以参考下 Blog Posts的提交 让我们从简单的开始.首页上必须有一张用户提交新的post的表单. 首先我们定义一个单域表单对象(fileapp/forms.py): ? 1 2 class PostForm(Form): post = TextField('post', validators = [Required()]) 下面,我们把这个表单添加到template中(file

详解数据库中的分页、内存和I/O延迟

几年前我写了一篇关于 AIX 调优的文章,现在 AIX 7 出现了,所以有必要重新审视需要在 AIX 系统上执行的基本调优措施.已经发布的许多技术级别 (TL) 和一些建议可能会改变.在本文中,我将提供与 AIX 5.3.6.1 和 7 中的可调项相关的 AIX 调优信息. 我主要关注 I/O.内存和网络.在默认情况下,AIX 6 和 7 在内存调优方面做得相当好,只需要做几个小调整.但是,AIX 5.3 在这个方面需要更多调优.图 1 给出不同的可调项及其默认设置.第四栏是对于这三个版本最新的