文档章节

MySQL ORACLE SQLServer分页

lissownpro
 lissownpro
发布于 2017/08/24 09:19
字数 1003
阅读 21
收藏 0
点赞 0
评论 1

物理分页与逻辑分页

  • 物理分页: 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如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

MyBatis 分页插件 - Mybatis_PageHelper

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

Liuzh_533 ⋅ 2014/05/20 ⋅ 20

使用 Informatica 做将字符串转换成日期

数据源为 SQLServer 数据库,且源字段 varchar 类型。需要抽取到 Oracle 数据库中,并且转换为 date 类型。 由于源表和目标表是两种不同的数据库,且数据类型不同,所以无法在源表限定转换器...

DreamOver ⋅ 06/08 ⋅ 0

sqlserver,你的delete语句表名为什么不能别名?

前几天写了几行sql,用于清除环境里面的脏数据,平时开发用的是oracle数据库,看了下里面的语句,处理concat字符串拼接函数看起来稍微特殊点,其它都没有啥问题。百度了下,cancat可以用在收...

heshifk ⋅ 04/23 ⋅ 0

各个数据库的无order by选取某一列的默认排序

Oracle: oracle对无order by的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但...

Aeroever ⋅ 04/25 ⋅ 0

mysql中You can’t specify target table for update in FROM clause错误解决方法

mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。 例如下面这个sql: 处理方法: 也就是说...

时刻在奔跑 ⋅ 04/19 ⋅ 0

SQLServer 开启远程访问,也可逆向思维进行关闭

为了可以通过TCP/IP协议远程访问SQLServer数据库,需要做以下几点: 在SQLServer所运行的服务器上,我们必须找到SQLServer所侦听的端口然后添加到WIndows防火墙的【允许入站】中。 一:需要添...

easonjim ⋅ 2015/08/25 ⋅ 0

MSSQL-Server On Docker

安装先决条件: • 适用于支持的任一 Linux 分发版的 Docker 引擎 1.8 以上版本,或适用于 Mac/Windows 的 Docker。 有关详细信息,请参阅 Install Docker(安装 Docker)。 • 至少 2 GB 的...

jwenshan ⋅ 05/30 ⋅ 0

数据库管理工具 - DBeaver

DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼容 JDBC 的数据库。 DBeaver 提供一个图形界面用...

匿名 ⋅ 2011/03/02 ⋅ 27

SQL Server on Linux 2017(初识 LINUX下的SQL-SERVER功能应用)

安装环境Centos7: 官方安装必要條件: 必须 RHEL 7.3 或 7.4 机至少 2 GB的内存 1、设置mssql_server的YUM官方源: curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsof...

jwenshan ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 27分钟前 ⋅ 0

Cube的构建过程

Cube 的构建方式有两种:全量构建和增量构建。两者的构建过程完全一样,区别在于构建时读取的数据源是全集还是子集。 Cube的构建步骤: 1.创建临时的 Hive 平表(从 Hive 读取数据)。 2.计算...

无精疯 ⋅ 32分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 35分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 49分钟前 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

Hive函数

1.函数explode (一转多) create table hive_wc(sentence string); load data local inpath '/home/hadoop/data/hive-wc.txt' into table hive_wc; 结果: hive > select * from hive_wc; ......

GordonNemo ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部