快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

如何在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 (完)



 




返回类别: 教程
上一教程: JAVA 树中 按最长路径行驶
下一教程: 多线程程序设计 (转)

您可以阅读与"如何在SqlServer与oracel中进行分页的讨论!"相关的教程:
· 如何在JSP中添加自己的TAG
· 如何在JSP中使用JDBC来联结MYSQL
· 如何在 Java 应用程序中读取 8 位和 24 位 Microsoft Windows 位图(转)
· 一种用SQL语句完成分页的高效率方式
· 小议如何在组件上显示图象
    微笑服务 优质保证 索取样品