RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
从Oracle关系数据库中选取第m至第n行记录
  • 作者:zhaozj
  • 发表时间:2020-12-23 10:36
  • 来源:未知

我相信很多程序员朋友都遇到过这么一个问题,就是分页显示。   在做的时候,无论如何,我们都不应该把记录全部读到内存当中再选择需要的记录少了的话,还可以,要是表中有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秒。    其它数据库我相信也能找到差不多的方法。 a