文档章节

MySQL ORACLE SQLServer分页

lissownpro
 lissownpro
发布于 2017/08/24 09:19
字数 1003
阅读 23
收藏 0

物理分页与逻辑分页

  • 物理分页: 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果
  • 逻辑分页: 逻辑分页依赖的是程序员编写的代码。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。

对比

1.数据库负担

物理分页每次都访问数据库,逻辑分页只访问一次数据库,物理分页对数据库造成的负担大。

2.服务器负担

逻辑分页一次性将数据读取到内存,占用了较大的内容空间,物理分页每次只读取一部分数据,占用内存空间较小。

3.实时性

逻辑分页一次性将数据读取到内存,数据发生改变,数据库的最新状态不能实时反映到操作中,实时性差。物理分页每次需要数据时都访问数据库,能够获取数据库的最新状态,实时性强。

4.适用场合

逻辑分页主要用于数据量不大、数据稳定的场合,物理分页主要用于数据量较大、更新频繁的场合。

Mysql分页

  • 语法:select * from table limit 0,5;或者select * from table limit 5;//取前五条记录
  • select * from table limit 10,5;//取10-15条记录

假如每页10条数据,可以采用下面语法

查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

查询第10条到第20条的数据的sql是:select * from table limit 10,20;  ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

查询第20条到第30条的数据的sql是:select * from table limit 20,30;  ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10

假如n为页码参数,select * from table limit(n-1)*10,10

Oracle分页

  • 语法:select * from where rownum<10;//查询前10条数据
  • select * from table where rownum>10 and rownum<=20;//查询10-20条数据

还是假如每10条为一页,n为页码

select * from table where rownum > (n-1)*10 and rownum <=n*10;

查询5000以后的五百条

  • select * from (select a.*, rownum as rnum from (select * from table) a where rownum <=5500) where rnum >= 5000;
  • select * from (select * from (select t.*, row_number() OVER(ORDER BY null) AS "row_number" from table t) p where p."row_number" > 5000) q where rownum <= 500;

第二种查询效率较高,耗时少,推荐第二种。

SQL Server分页

  • 先搜出id在1-40之间的数据,紧接着搜出id不在1-40之间的数据,最后将搜出的结果取前十条。
SELECT TOP 10           --3、最后再取出前10条数据,这就是数据库中第41-50条数据(注意,id不是41-50,因为我删除了id为44、45的记录)
        *
FROM    dbo.a
WHERE   id NOT IN (     --2、然后搜出id不在前40之内的其它数据
        SELECT TOP 40   --1、按照id排序之后先搜出前40条数据
                id 
        FROM    dbo.a
        ORDER BY id )
ORDER BY id;
  • 把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录。
SELECT TOP 10
        *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY id ) AS rownumber ,
                    *
          FROM      a
        ) A
WHERE   rownumber > 40;
  • 使用OFFSET是SQLServer2012新具有的分页功能,主要功能是从第x条数据开始共取y数据。但是其必须根再Order By
    后面使用,相比前三种方式更加方便。例如
select id from a Order by id Offset 0 Row Fetch Next 5 Rows Only.

© 著作权归作者所有

共有 人打赏支持
lissownpro
粉丝 0
博文 36
码字总数 14415
作品 0
西安
程序员
加载中

评论(1)

你好--明天
你好--明天
select * from table limit 10,5;//取10-15条记录 有问题哦, 取出的是11到15共5条记录
Mybatis 分页插件 PageHelper 5.1.4 发布

如果你也在用 Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 该插件目前支持以下数据库的物理分页 Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005+) I...

Liuzh_533
04/23
0
0
Mybatis Generator Plus

1.介绍: MyBatis generator plus 基于mybatis-generator-core v.1.3.2 扩展,增加如下主要特性: 生成支持Oracle、Mysql、Sqlserver分页查询的代码: //分页查询demoOperateLogExample relatio...

handosme_w
2017/01/20
0
2
大家期待已久的iMatrix平台mysql版本发布了

iMatrix平台有三个版本:oracle、sqlserver、mysql。 继iMatrix-oracle-6.0.0.RC1版本和iMatrix-sqlserver-6.0.0.RC1版本之后, 随后iMatrix-mysql-6.0.0.RC1版本相继发布了。关于版本的详细...

iMatrix
2014/07/15
0
0
iMatrix平台github源码说明

iMatrix平台需要依赖cas单点登录项目和iMatrix-static静态资源,所以源码包中也包含了这两个项目,其中iMatrix-static静态资源又分为压缩版(imatrix-static)和源版(imatrix-static-source),压...

iMatrix
2013/08/09
0
1
折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)

说明: 为了让CYQ.Data 框架支持Oracle,这几天对Oracle进行了基本探索,并把中间遇到的问题轻轻的记录了下来,与大伙共享。 总共有三篇: 1:初折腾Oracle问题小记 2:初折腾Oracle问题小记二...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一个可能的NEO链上安全随机数解决方案

0x00 困境 链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执...

暖冰
今天
1
0
【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
4
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
19
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部