« 在ORACLE中实现分页等功能« »我自己设计的中文分词算法(转载,)精华 »
从Oracle关系数据库中选取第m至第n行记录 (可用于分页)

我相信很多程序员朋友都遇到过这么一个问题,就是分页显示。
  
在做的时候,无论如何,我们都不应该把记录全部读到内存当中再选择需要的记录少了的话,还可以,要是表中有50万条记录呢?保证你会死掉  
  
最好的方法:  
  
我先问一个问题:真的会有很多时间需要支持很多种数据库的应用吗?不是吧?  
  
如果的确真的是的话那么分别实现一套方法吧,然后用DAO模式来解决藕合度问题,把数据库操作的事情单拉出来吧!  
  
下面给出Oracle/Sqlserver/MySQL三种数据库先出第m至第n条记录的方法:  
  
获取按照F1字段升序排序的,从m至n行记录
  
注意,F1一定要做索引或主键,最好是主键
  
SqlServer
  
select t2.* from (Select top n-m t1.* from (Select top n * from Tablename as t order by t.F1) as t1 order by t1.F1 desc) as t2 order by t2.F1
  
select t2.* from  
(
select top 20 t1.* from  
(
select top 500020 * from dbgen as t order by t.F1
)  
as t1 order by t1.F1 desc
)
as t2 order by t2.F1
  
Oracle
  
select * from (select rownum r, t.* from Tablename t where r<n) t1 where t1.r > m and t1.r <= m
  
select * from (select rownum r, t.* from DBTEST t where rownum<300020) ss where ss.r > 300000 and ss.r <= 300020
  
MySQL
  
最简单
select * from Tablename t order by t.F1 limit n,m-n+1
  
select * from DBtest t order by t.F1 limit 300000,20  
  
性能对比:
三者差不多少!
上面实例中的语句在50万条记录的表中选取第50万左右的记录20条,均不超过1秒。  
  
其它数据库我相信也能找到差不多的方法

取得第M条记录之后的N条记录:

SELECT TOP N *
FROM  [TABLE]
WHERE (ID NOT IN
          (SELECT TOP M id
           FROM  [TABLE]
           ORDER BY [ORDER]))
ORDER BY [ORDER]

 


Tags: oracle数据库  ORACLE  MYSQL数据库  

原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/

本文链接地址:http://www.busfly.net/csdn/post/539.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
Feed订阅集
网站分类
勤劳致富^.^
最近发表
最新评论及回复
最近留言
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(VS为主):3769186.