文档章节

MySQL ORACLE SQLServer分页

lissownpro
 lissownpro
发布于 2017/08/24 09:19
字数 1003
阅读 22
收藏 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
大家期待已久的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
MyBatis 分页插件 - Mybatis_PageHelper

Mybatis分页插件 - PageHelper 如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 该插件目前支持以下数据库的物理分页: Oracle Mysql MariaDB SQLite Hsqldb Post...

Liuzh_533
2014/05/20
0
20

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
0
0
Android中的设计模式之状态模式

参考 《设计模式:可复用面向对象软件的基础 》5.8 State 状态 对象行为型模式 《Android源码设计模式解析与实战》第7章 随遇而安--状态模式 意图 允许一个对象在其内部状态改变时改变它的行...

newtrek
昨天
0
0
xshell端 vim没有颜色

说明 使用xshell连接服务器的时候,使用vim打开文档没有颜色 解决方法: 1.在更目录home或者etc下找到vim的配置文件vimrc 2.vim打开它找个坑,添加下面这个东西 set t_Co=256 3.保存退出,就...

杉下
昨天
0
0
spring 资料

spring boot http://www.ityouknow.com/springboot/2016/01/06/spring-boot-quick-start.html

zaolonglei
昨天
2
0
TypeScript基础入门 - 函数 - 简介

转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.1.6 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接...

durban
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部